Python:如何在每次迭代的for循环中将列表重置为原始值?

时间:2019-06-13 16:02:15

标签: python-3.x list

我正在尝试从列表中逐个弹出每个值,以便找到最小和最大和。这样做时,我会在每次迭代后将列表重置为其原始值,但似乎不起作用...

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

任何帮助将不胜感激!

1 个答案:

答案 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))