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