2017-10-20 81 views
-2

您好,所以我期望用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 
+0

应该是区分大小写? – RomanPerekhrest

+0

没有不必区分大小写 – KMAN

+1

upvote for doggos n puppers – wim

回答

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'] 

与替代解决方案210个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:]] 
+0

是否有可能做到这一点,没有任何ifs,只是切片或导入 – KMAN

+0

@KirusanS,是的,看到我的更新 – RomanPerekhrest

+0

嘿罗马所以如果我想这样做,如果我想第一次看起来狗总是在第二部分的名单,即使只有一次狗出现在给定的字符串? – KMAN

0

分裂在DOG是关键!!此代码将适用于您提到的所有情况。

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', ''] 
+0

我的**最后**更新如果狗第二次没有出现,我该怎么办?那么我只是得到一个错误 – KMAN

+0

@KirusanS所以你说的'HELLODOGPAPA'的答案应该是'('HELLO','DOGPAPA','')' – Miraj50

+0

是的,这是它应该是什么,如果有第二次发生的字符串狗然后包括第二次发生狗后的一切将是列表的第三部分 – KMAN

0

这是很容易使用split函数来完成。例如,您可以通过一个分隔符拆分任意字符串,像狗,像这样:

>>> 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的小部分。

0

Split字符串以 '狗' 和使用条件,以得到期望的结果

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'] 
相关问题