用Python修改列表
我的代码是:用Python修改列表,python,Python,我的代码是: >>> lis=['ALRAGUL','AKAL','to7a'] >>> for i in lis: if i.startswith('AL'): j=lis[lis.index(i)+1] L=list(itertools.repeat(j, 2)) lis[lis.index(i)+1]=L lis[lis.index(i)+1]=i[2: ] lis[lis.index(i)]='AL'
>>> lis=['ALRAGUL','AKAL','to7a']
>>> for i in lis:
if i.startswith('AL'):
j=lis[lis.index(i)+1]
L=list(itertools.repeat(j, 2))
lis[lis.index(i)+1]=L
lis[lis.index(i)+1]=i[2: ]
lis[lis.index(i)]='AL'
>>> print lis
['AL', 'RAGUL', 'to7a']
但我希望结果是:
['AL', 'RAGUL','AKAL' 'to7a']
我想让它有一个大致的含义,即代码适用于任何单词,也适用于它们的任何排列
例如,我希望它在任何条件下拆分('AL')
thx:很多:)像这样的东西
def separate(lst, chunk):
for n in lst:
if n.startswith(chunk):
for x in n.partition(chunk)[1:]:
yield x
else:
yield n
以及输出:
In [104]: list(separate(['ALRAGUL','AKAL','to7a'], 'AL'))
Out[104]: ['AL', 'RAGUL', 'AKAL', 'to7a']
这应该做到:
>>> lis = ['ALRAGUL', 'AKAL', 'to7a']
>>> for i, s in list(enumerate(lis)):
... if s.startswith('AL'):
... lis[i:i+1] = ['AL', s[2:]]
...
>>> lis
['AL', 'RAGUL', 'AKAL', 'to7a']
>>>
另一种选择:
from itertools import chain
import re
print filter(None, chain.from_iterable(re.split('^(AL)', el) for el in lis))
或:
这段代码背后的逻辑是什么?它到底在做什么?澄清一下,只有当
AL
位于字符串开头时,它才应该拆分?因为在你的例子中,AKAL
没有被分割。@thegrinner是的,我只是在一开始就想要它。。thx,这正是我想要的。为什么这个问题被大力否决了?这似乎是一个合法的话题,OP试图展示他到目前为止所做的事情,但从表面上看不清楚如何做到这一点。让我们不要让自己成为一个卑鄙的地方…@drewk dunn关心投票…我不关心。让人们思考他们对你的看法…这很有效…我真的很感激:)如果我想添加另一个条件,比如:>>>lis=['ALRAGUL',AKALH','to7a']>>对于列表中的I,s(枚举(lis)):如果s.startswith('AL'):lis[I:I+1]=如果s.endswith('H'):lis[i:i+1]=[s[:-1],'H']>>>lis['AL','AKAL','H','AKALH','to7a'],但我希望结果是:['AL','RAGUL','AKAL','H','to7a']有什么想法吗?Thx:)@Blender Thx很多..它也有效:)…是的,它也有效Thx谢谢你的帮助:)
filter(None, chain.from_iterable(map(re.compile ('^(AL)').split, lis)))