Как происходит удаление элемента из списка в Python?
Есть вот такой кусок кода
import random
A = float(input("Введите А: "))
B = float(input("Введите В: "))
List = []
List2 = []
for i in range(0, 31):
List.append(random.randint(A, B))
List2 = List
List2.pop(0)
print(List)
print(List2)
При выполнении получаю примерно следующее:
Введите А: 10
Введите В: 20
[13, 12, 10, 16, 13, 20, 11, 11, 11, 12, 10, 12, 15, 13, 18, 18, 13, 14, 12, 13, 20, 15, 16, 19, 12, 10, 18, 14, 18, 20]
[13, 12, 10, 16, 13, 20, 11, 11, 11, 12, 10, 12, 15, 13, 18, 18, 13, 14, 12, 13, 20, 15, 16, 19, 12, 10, 18, 14, 18, 20]
То есть элемент из списка не удаляется. Но если написать вот так:
import random
A = float(input("Введите А: "))
B = float(input("Введите В: "))
List = []
List2 = []
for i in range(0, 31):
List.append(random.randint(A, B))
print(List)
List2 = List
List2.pop(0)
print(List2)
то результат получается такой, какой и ожидается:
Введите А: 10
Введите В: 20
[18, 15, 15, 12, 19, 17, 13, 19, 16, 15, 18, 17, 10, 19, 17, 15, 15, 14, 10, 15, 17, 10, 14, 17, 20, 11, 12, 11, 12, 19, 20]
[15, 15, 12, 19, 17, 13, 19, 16, 15, 18, 17, 10, 19, 17, 15, 15, 14, 10, 15, 17, 10, 14, 17, 20, 11, 12, 11, 12, 19, 20]
Почему это отрабатывает так?
Ответы (2 шт):
Новый код:
import random
A = float(input("Введите А: "))
B = float(input("Введите В: "))
List = []
List2 = []
for i in range(31):
List.append(random.randint(A, B))
List2 = List[:]
List2.pop(0)
print(List)
print(List2)
Разберём ваши ошибки.
Во-первых, с помощью List2=List вы ссылаетесь на список List, и при изменении List2 у вас изменяется и List тоже.
То есть, вы неверно написали:
То есть элемент из списка не удаляется.
Элемент удаляется, но удаляется из двух списков. Соответственно, во втором случае если вы замените кусок кода:
print(List)
List2 = List
List2.pop(0)
print(List2)
на следующий
print(List) #одно значение
List2 = List
List2.pop(0)
print(List) #совершенно другое значение
print(List2)
, то список List выведется двумя разными значениями.
Чтобы решить проблему, замените List2=List на List2=List[:] (как я уже сделал в готовом коде)
Во-вторых, зачем делать for i in range(0, 31), если можно сделать for i in range(31)?
Потому что вы создаете не новую переменную, как это делается в других языках, а создаете новую ссылку на уже созданный объект.
Чтобы создать новый объект делается так:
import copy
List2 = copy.deepcopy(List)