修改Python中的列表

时间:2013-04-29 20:27:40

标签: 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'
>>> print lis
['AL', 'RAGUL', 'to7a']

但我希望结果成为:

['AL', 'RAGUL','AKAL' 'to7a']

我希望它以某种方式表达一般意义,即代码适用于任何单词以及它们的任何排列 例如,我希望它在任何条件下分割('AL') 很多:)

3 个答案:

答案 0 :(得分:2)

这样的东西?

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

答案 1 :(得分:2)

应该这样做:

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

答案 2 :(得分:1)

另一种选择:

from itertools import chain
import re

print filter(None, chain.from_iterable(re.split('^(AL)', el) for el in lis))

或者:

filter(None, chain.from_iterable(map(re.compile ('^(AL)').split, lis)))