我正在尝试从列表中逐个弹出每个值,以便找到最小和最大和。这样做时,我会在每次迭代后将列表重置为其原始值,但似乎不起作用...
a=[1,2,3,4,5]
res=[]
for i in range(len(a)):
#print(a)
lst=a
#print(lst)
lst.pop(i)
print(lst)
res.append(sum(lst))
print(min(res))
print(max(res))
[2, 3, 4, 5]
[2, 4, 5]
[2, 4]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-33-42daa1037d37> in <module>
5 lst=a
6 #print(lst)
----> 7 lst.pop(i)
8 print(lst)
9 res.append(sum(lst))
IndexError: pop index out of range
每次迭代后,我都将“ lst”重置为“ a”,但是它没有按预期工作。
预期结果:
[2, 3, 4, 5]
[1, 3, 4, 5]
[1, 2, 4, 5]
[1, 2, 3, 5]
[1, 2, 3, 4]
10
14
任何帮助将不胜感激!
答案 0 :(得分:1)
运算符“ =”不会将您的列表复制到两个不同的对象中。 实际上,“ lst”和“ a”都指的是同一对象。
这意味着如果您修改“ lst”,您还将修改“ a”:
>>> a=[1,2,3,4,5]
>>> lst = a
>>> lst.pop(0)
>>> print(a)
[2, 3, 4, 5]
您可以使用模块副本及其功能Deepcopy更改此行为。它将复制您的列表,但不会影响您的原始列表。
import copy
a=[1,2,3,4,5]
res=[]
for i in range(len(a)):
#print(a)
lst= copy.deepcopy(a)
#print(lst)
lst.pop(i)
print(lst)
res.append(sum(lst))
print(min(res))
print(max(res))