根据特定要求重新排列字符串

时间:2017-10-20 16:44:25

标签: python list

您好,所以我希望用def,find等简单的东西构建这个python函数。到目前为止,我知道如何获取代码的第一部分。

给定一个字符串,例如“HELLODOGMEMEDOGPAPA”,我需要返回一个给我三件事的列表:

在狗之前的一切,我将表示为before_dog 狗直到狗出现dog_todog 第二次出现狗之后的所有东西都将由after_todog表示 该列表的格式为[before_dog,dog_todog,after_todog]。

所以例如给定(“HELLODOGMEMEDOGPAPADD”)这将返回列表 (“HELLO”,“DOGMEME”,“DOGPAPADD”)

另一个例子是(“HEYHELLOMANDOGYDOGDADDY”)这将返回列表 ( “HEYHELLOMAN”, “DOGY”, “DOGDADDY”)

但如果我有(“HEYHELLODOGDADDY”) 输出将是(“HEYHELLO”,“DOGDADDY”,“”)

如果狗从未出现(“HEYHELLOYO”),那么输出将是(“HEYHELLOYO”,“,”“)

这是我到目前为止所做的:

def split_list(words):
    # declare the list
    lst = []
    # find the first position
    first_pos=words.find("DOG")
    # find the first_pos
    before_dog = words [0:first_pos]
    lst.append(before_dog)
    return lst

4 个答案:

答案 0 :(得分:1)

split_2_dogs()函数的有趣函数re.findall()

import re

def split_2_dogs(s):
    if s.count('DOG') == 2:   # assuring 2 dogs are "walking" there
        return list(re.findall(r'^(.*)(DOG.*)(DOG.*)$', s)[0])

print(split_2_dogs("HELLODOGMEMEDOGPAPADD"))
print(split_2_dogs("HEYHELLOMANDOGYDOGDADDY"))

输出:

['HELLO', 'DOGMEME', 'DOGPAPADD']
['HEYHELLOMAN', 'DOGY', 'DOGDADDY']

使用str.index()str.rfind()函数的替代解决方案:

def split_2_dogs(s):
    if 'DOG' not in s: return [s,'']
    pos1, pos2 = s.index('DOG'), s.rfind('DOG')
    return [s[0:pos1], s[pos1:pos2], s[pos2:]]

答案 1 :(得分:0)

from itertools import izip_longest words = 'HEYHELLODOGDADDY' words = words.split("DOG") words = ['DOG'+j if i>0 else j for i,j in enumerate(words)] # words = ['HEYHELLO', 'DOGDADDY'] ans = ['','',''] # stitch words and ans together ans = [m+n for m,n in izip_longest(words,ans,fillvalue='')] print ans 分裂是关键!!此代码适用于您提到的所有案例。

['HEYHELLO', 'DOGDADDY', '']

输出:

Page.RenderControl(hw);

答案 2 :(得分:0)

使用split函数很容易做到这一点。例如,您可以通过分隔符(如dog)拆分任何字符串,如下所示:

>>> chunks = 'HELLODOGMEMEDOGPAPA'.split('DOG')
>>> print(chunks)
['HELLO', 'MEME', 'PAPA']

然后你可以在list comprehension中使用它的输出,如下所示:

>>> dog_chunks = chunks[:1] + ["DOG" + chunk for chunk in chunks[1:]]
>>> print(dog_chunks)
['HELLO', 'DOGMEME', 'DOGPAPA']

唯一有点棘手的一点是确保你不要将狗添加到列表中的第一个字符串,因此slicing的一点点。

答案 3 :(得分:0)

Split'DOG'处的字符串并使用条件来获得所需的结果

s = 'HELLODOGMEMEDOGPAPADD'
l = s.split('DOG')
dl = ['DOG'+i for i in l[1:]]
[l[0]]+dl if l[0] else dl

输出:

['HELLO', 'DOGMEME', 'DOGPAPADD']