我一直在努力创建一个程序,可以获得比萨的多个分数。然后,我需要删除列表中的最高和最低值以删除异常值。但是,当我尝试删除最高和最低分时,它会删除oldScores列表中的最高和最低分数
pizzaScores = [[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]]
oldPizzaScores = pizzaScores
for i in range(len(pizzaScores)):
pizzaScores[i].remove(max(pizzaScores[i]))
pizzaScores[i].remove(min(pizzaScores[i]))
print(oldPizzaScores)
print(pizzaScores)
答案 0 :(得分:1)
这种情况正在发生,因为您只是分配了对象oldPizzaScores = pizzaScores
,并且未在此处复制值。您可以使用深度复制来复制oldPizzaScores = deepcopy(pizzaScores)
使用深层复制。
from copy import deepcopy
pizzaScores = [[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]]
oldPizzaScores = deepcopy(pizzaScores)
for i in range(len(pizzaScores)):
pizzaScores[i].remove(max(pizzaScores[i]))
pizzaScores[i].remove(min(pizzaScores[i]))
print(oldPizzaScores)
print(pizzaScores)
<强>输出:强>
[[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5] ],[1,2,3,4,5]]
[[2,3,4],[2,3,4],[2,3,4],[2,3,4],[2,3,4]]
答案 1 :(得分:0)
前段时间我经历了similar issue
行oldPizzaScores = pizzaScores
是真正的罪魁祸首。它将pizzaScores
变量的引用分配给oldPizzaScores
。
因此,您对pizzaScores
所做的任何更改都将应用于另一个列表原始列表,您在该行中引用了该列表。
要避免此问题,您应该使用deepcopy
库
copy
方法
将行oldPizzaScores = pizzaScores
更改为oldPizzaScores = deepcopy(pizzaScores)
from copy import deepcopy
pizzaScores = [[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]]
oldPizzaScores = deepcopy(pizzaScores)
for i in range(len(pizzaScores)):
pizzaScores[i].remove(max(pizzaScores[i]))
pizzaScores[i].remove(min(pizzaScores[i]))
print(oldPizzaScores)
print(pizzaScores)
<强> P.S。强>
根据PEP8样式指南,如果您使用以_
分隔的小写的变量名称
例如,oldPizzaScores
应重命名为old_pizza_scores
,依此类推!
答案 2 :(得分:0)
pizzaScores = [[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]]
oldPizzaScores = [[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]]
for i in range(len(pizzaScores)):
pizzaScores[i].remove(max(pizzaScores[i]))
pizzaScores[i].remove(min(pizzaScores[i]))
print(oldPizzaScores)
print(pizzaScores)
答案 3 :(得分:0)
在你的代码中, 第二行是错误的所在。
oldPizzaScores = pizzaScores
此行使新引用(oldPizzaScores)指向值(pizzaScores也指向该值)。这意味着 -
1. If you change oldPizzaScores then pizzaScores will also change accordingly. For eg,
>>> oldPizzaScores.pop() // remove the last item
>>> oldPizzaScores
>>> pizzaScores // same valua as above
2. Similar as point 1 with pizzaScores.
解决方案 -
Do a deep copy of pizzaScores such that the values are copied to oldPizzaScores, i.e.
from copy import deepcopy
oldPizzaScores = deepcopy(pizzaScores)
您也可以使用切片运算符代替deepcopy模块。做 -
oldPizzaScores = pizzaScores[:]