Как итеративно увеличивать целое число в списке в цикле while

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

Вот что я пробовал:

my_start_list = [1, 2, 3, 4]
my_end_list = []

while my_start_list[0] != 6:
    my_start_list[0] += 1
    my_end_list.append(my_start_list)

print(my_start_list)
print(my_end_list)

и вот что я получаю:

[6, 2, 3, 4]
[[6, 2, 3, 4], [6, 2, 3, 4], [6, 2, 3, 4], [6, 2, 3, 4], [6, 2, 3, 4]]

И я как бы ожидал:

[6, 2, 3, 4]
[[2, 2, 3, 4], [3, 2, 3, 4], [4, 2, 3, 4], [5, 2, 3, 4], [6, 2, 3, 4]]

Может ли кто-нибудь объяснить, что здесь происходит, или указать мне направление, которое могло бы объяснить это?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
67
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы должны создать копию списка, который собираетесь добавить, иначе вы всегда добавляете один и тот же список:

my_start_list = [1, 2, 3, 4]
my_end_list = []

while my_start_list[0] != 6:
    my_start_list[0] += 1
    my_end_list.append(my_start_list.copy()) # appends a copy of the list

print(my_start_list)
print(my_end_list)

Выход:

[6, 2, 3, 4]
[[2, 2, 3, 4], [3, 2, 3, 4], [4, 2, 3, 4], [5, 2, 3, 4], [6, 2, 3, 4]]
Ответ принят как подходящий

Здесь список, который вы добавляете, работает как указатель, а не как отдельный объект. поэтому вам нужно копировать список на каждой итерации.

my_start_list = [1, 2, 3, 4]
my_end_list = []
c = []

while my_start_list[0] != 6:
    my_start_list[0] = my_start_list[0] + 1
    c = my_start_list.copy()
    my_end_list.append(c)

print(my_start_list)
print(my_end_list)

Выход:

[6, 2, 3, 4]
[[2, 2, 3, 4], [3, 2, 3, 4], [4, 2, 3, 4], [5, 2, 3, 4], [6, 2, 3, 4]]
​

Другие вопросы по теме