Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python修改列表_Python - Fatal编程技术网

用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)))