Python: заменить первый элемент на сам список - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть список:

mylist = [1,2,3]

И я хочу изменить первый элемент на список, так что список внутри списка.Моя первая попытка:

mylist + mylist[1:]

дает мне

[1, 2, 3, 2, 3] # not what I want

моя вторая попытка

mylist[0]=mylist

дает мне

[[...], 2, 3] # is this an infinite list?

Хотя я хочу

[[1,2,3], 2, 3]

Ответы [ 5 ]

0 голосов
/ 22 сентября 2018

mylist[0] = mylist указывает на ссылку mylist.Вы можете визуализировать это примерно так: enter image description here

Каждый 1-й элемент имеет список, который снова имеет другой список.И это продолжается.

Таким образом, решение вашей проблемы выглядит примерно так:

>>> mylist = [1,2,3]
>>> mylist[0] = mylist[:]
>>> mylist
[[1, 2, 3], 2, 3]
0 голосов
/ 22 сентября 2018

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

mylist[0] = mylist[:]
0 голосов
/ 22 сентября 2018

mylist[0] = mylist дает вам список, который содержит себя - значение mylist == mylist[0] == mylist[0][0] == mylist[0][0][0] == ....Похоже, это не то, что вам нужно.

Исходя из того, что вы даете, вашу проблему лучше сформулировать так:

  • Создание нового списка, содержащего старый - mylist = [mylist] + mylist[1:]
  • Помещение копии списка в себя - mylist[0] = mylist[:] mylist[0] = mylist.copy()
0 голосов
/ 22 сентября 2018

Использование:

temp = mylist
mylist[0] = temp[:]
0 голосов
/ 22 сентября 2018

Вам нужно:

mylist = [1,2,3]

mylist[0] = list(mylist)
print(mylist)

Вывод:

[[1, 2, 3], 2, 3]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...