循环列表的两种方式 - 差异

Igo*_*234 5 python

我必须反转一个长度大于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)

工作良好.有什么不同?

Ant*_*vBR 1

当您迭代列表时,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)