两种Python列表遍历方式的差异:为何修改元素效果不同?
为什么两种列表遍历方式的效果不一样?
你遇到的问题其实是Python中遍历列表元素和通过索引修改列表的核心差异,我来给你拆解清楚:
第一种遍历方式的问题
先看你写的第一段代码:
for word in words: if len(word) >= 5: word = word[::-1]
这段代码里,word只是列表中每个元素的临时副本——当你遍历words时,每次循环都会把列表里的元素值复制给word这个变量。你修改word的值,只是改变了这个临时变量的指向,根本没碰原列表里的元素。就像你把书架上的书拿出来抄了一份,修改抄的那份,书架上的原书当然不会变啦。
第二种遍历方式为什么有效
再看能正常工作的代码:
for i in range(len(words)): if len(words[i]) >= 5: words[i] = words[i][::-1]
这里你通过range(len(words))拿到了列表每个元素的索引位置,然后直接通过words[i]去访问并修改原列表对应位置的元素。相当于你直接走到书架的第i层,把那本书拿出来修改后再放回去,原列表自然就跟着变了。
额外的小技巧
其实还有更Pythonic的写法,用列表推导式一行搞定:
words = [word[::-1] if len(word) >=5 else word for word in words]
这种方式会直接生成一个新的列表,既简洁又清晰,也能达到你的需求。
内容的提问来源于stack exchange,提问作者Igor234
相关产品推荐
相关产品推荐

