Python嵌套for循环替换列表元素不生效问题排查
问题根因
你代码未达到预期的核心原因是:Python 中for value in user_sentence遍历列表时,拿到的value是列表元素的值拷贝,属于临时变量,你修改这个临时变量的值完全不会影响原user_sentence列表的内容。而你直接修改user_sentence[1]是直接通过索引操作原列表的存储内容,所以能生效。
另外你嵌套遍历字典的写法效率很低,不需要循环遍历字典的键做比对,直接用in判断键是否存在即可。
正确实现方案
方案1:通过索引遍历修改原列表
# 同时取索引和对应值 for index, value in enumerate(user_sentence): # 直接判断值是否是字典的键 if value in words_dict: # 直接修改原列表对应位置的内容 user_sentence[index] = words_dict[value] print(user_sentence[1])
方案2:用列表推导式生成新列表(Python 更推荐的写法)
用字典的get方法简化判断,键存在就取对应替换值,不存在就保留原值:
user_sentence = [words_dict.get(value, value) for value in user_sentence] print(user_sentence[1])
内容的提问来源于stack exchange,提问作者EvilSnear
相关产品推荐
相关产品推荐

