Python: Как восстановить исходное значение списка внутри цикла for для каждой итерации? - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь вытолкнуть все значения одно за другим из списка, чтобы найти минимальную и максимальную сумму. При этом я сбрасываю список к его первоначальному значению после каждой итерации, но, похоже, он не работает ...

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 Ответ

1 голос
/ 13 июня 2019

Оператор "=" не дублирует ваш список на два разных объекта. На самом деле «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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...