我必须反转一个长度大于4的列表中的每个单词.所以我尝试了:
for word in words:
if len(word) >= 5:
word = word[::-1]
Run Code Online (Sandbox Code Playgroud)
它不起作用.但是这个:
for i in range(len(words)):
if len(words[i]) >= 5:
words[i] = words[i][::-1]
Run Code Online (Sandbox Code Playgroud)
工作良好.有什么不同?
当您迭代列表时,Python 会创建对变量的引用(具有相同的 ID)。然而,这些是不可编辑的。例如检查一下: Can't修改循环Python中的列表元素
考虑这个例子,希望可以帮助你:
words = ['abcdef','abc']
for ind,i in enumerate(words):
print('Loop {}'.format(ind))
i = i[::-1]
print('words equal {}'.format(words))
words[ind] = words[ind][::-1]
print('words equal {}'.format(words))
print()
Run Code Online (Sandbox Code Playgroud)
返回:
Loop 0
words equal ['abcdef', 'abc'] # <--- after changing i (nothing changed)
words equal ['fedcba', 'abc'] # <--- after changing words[ind]
Loop 1
words equal ['fedcba', 'abc'] # <--- after changing i (nothing changed)
words equal ['fedcba', 'cba'] # <--- after changing words[ind]
Run Code Online (Sandbox Code Playgroud)
在你的情况下
最简单的解决方案是使用列表理解。考虑一下:
rWords = [word[::-1] if len(word) >=5 else word for word in words]
Run Code Online (Sandbox Code Playgroud)