如何通过字典直接修改对应底层变量取值,避免大量条件判断?
解决方法
你的核心问题在于创建了新列表而非原地修改原列表。Python中列表是可变对象,字典存储的是列表的引用,所以直接修改字典中对应列表的内容,原变量(list1/list2/list3)会同步变化,完全不需要if语句。
方案1:原地修改列表元素
直接遍历字典中对应的列表,逐个修改元素:
list1 = [1, 2, 3] list2 = [4, 5, 6] list3 = [7, 8, 9] dictionary = { "dog": list1, "cat": list2, "mouse": list3 } animal = input("Type dog, cat or mouse: ") target_list = dictionary[animal] # 原地修改每个元素,不创建新列表 for i in range(len(target_list)): target_list[i] += 1 print(list1, list2, list3)
方案2:用切片赋值替换整个列表内容
如果需要批量替换(比如用列表推导式生成新内容),可以用切片赋值的方式,把新内容直接写入原列表对象:
list1 = [1, 2, 3] list2 = [4, 5, 6] list3 = [7, 8, 9] dictionary = { "dog": list1, "cat": list2, "mouse": list3 } animal = input("Type dog, cat or mouse: ") target_list = dictionary[animal] # 切片赋值,原地替换原列表的所有元素 target_list[:] = [x+1 for x in target_list] print(list1, list2, list3)
为什么原方法无效?
你之前用numbers_list = [x+1 for x in numbers_list]生成了新的列表对象,此时numbers_list指向新对象,和原列表(list1等)已经没有关联。后续的if语句只是把新对象赋值给原变量,这完全没必要——只要直接修改原列表对象的内容,字典和原变量都会同步更新,因为它们指向同一个对象。
内容的提问来源于stack exchange,提问作者Valtteri
相关产品推荐
相关产品推荐

