用Python修改列表

用Python修改列表,python,Python,我的代码是: >>> lis = ['ALRAGUL', 'AKALH', 'to7a'] >>> for i, s in list(enumerate(lis)): if s.startswith('AL'): lis[i:i+1] = ['AL',s[2:]] if s.endswith('H'): lis[i:i+1] =[s

我的代码是:

>>> lis = ['ALRAGUL', 'AKALH', 'to7a']
>>> for i, s in list(enumerate(lis)):   
        if s.startswith('AL'):      
            lis[i:i+1] = ['AL',s[2:]]   
        if s.endswith('H'):             
            lis[i:i+1] =[s[:-1],'H']
>>> lis     
['AL', 'AKAL', 'H', 'AKALH', 'to7a']
但我希望结果是:

['AL', 'RAGUL', 'AKAL', 'H', 'to7a']
我想要它的一般含义是,无论单词是什么,以及它们的排列方式是什么,代码都能工作。例如,在任何情况下,我希望它在开始时被拆分(
'AL'
),在结束时被拆分(
'H'
),请尝试以下代码

lis = ['ALRAGUL', 'ALRAGUL', 'AKALH', 'to7a', 'ALRAGULH', 'AL', 'H', 'ALH']
i = 0
for s in list(lis):
    i = lis.index(s, i)
    if s.startswith('AL') and len(s) > 2:
        lis[i:i + 1] = ['AL', s[2:]]
        s = s[2:]
        i += 1

    if s.endswith('H') and len(s) > 1:
        lis[i:i + 1] = [s[:-1], 'H']
        i += 1

print lis # ['AL', 'RAGUL', 'AL', 'RAGUL', 'AKAL', 'H', 'to7a', 'AL', 'RAGUL', 'H', 'AL', 'H', 'AL', 'H']

使用生成器函数执行类似以下操作:

lis = ['ALRAGUL','AKALH', "AL", 'H','ALH' ,'to7a','ALRAGULH']

def solve(lis):
    for x in lis:
        if x.startswith("AL") and x.endswith("H"):
            yield x[:2]
            if len(x)>4:
                yield x[2:-1]
            yield x[-1]
        elif x.startswith("AL"):
            yield x[:2]
            if len(x)>2:
                yield x[2:]
        elif x.endswith("H"):
            if len(x)>1:
                yield x[:-1]
            yield x[-1]
        else:
            yield x

new_lis = list(solve(lis))
print new_lis
输出:

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

只需使用新列表即可。这将防止您出现索引问题(因为在列表中间插入另一项时,
i
不会更新):


您将这个问题标记为“
c”
”用于…?我已经尝试修复您的缩进,但请仔细检查并确保这是您的代码的实际外观。您将如何拆分
'ALRAGULH'
?旁注:对于列表中的I,没有理由执行
,因为对于I,无论什么中的s都将执行完全相同的操作(除非在某些罕见的情况下,例如,
无论什么
中的迭代器同时被其他代码使用)。您两天前询问过,它已关闭。为什么你现在期待不同的结果呢?是的,它确实有效…Thx很多:)如果我打扰了任何人,我真的很抱歉here@user1996764请参阅我的解决方案。如果列表中有任何重复的字符串,则此操作无效。
i=list.index
将找到与
s
匹配的字符串的第一个索引,即使您正在查看第二个字符串。@user1996764如果字符串为“AL”或“H.ya”,则此操作无效。它会给我以下错误:文件“”,如果s.startswith('AL'),则第3行:^IndentationError:意外的缩进仍然不适用于字符串,如
“AL”
“H”
“ALH”
。谢谢您的帮助..我很感激:)我是否可以将结果插入变量以使用它???@user1996764是的,只需将返回值存储在变量中即可。查看我的更新答案。@user1996764您需要单击我答案左侧的勾号才能接受它。@user1996764接受答案是您感谢我们的唯一方式。:)
>>> lis = ['ALRAGUL', 'AKALH', 'to7a']
>>> lisNew = []
>>> for s in lis:
        if s != 'AL' and s.startswith('AL'):
            lisNew.append('AL')
            s = s[2:]
        if s != 'H' and s.endswith('H'):
            lisNew.append(s[:-1])
            lisNew.append('H')
        else:
            lisNew.append(s)
>>> lisNew
['AL', 'RAGUL', 'AKAL', 'H', 'to7a']