Каков синтаксис для вставки одного списка в другой в Python?

Даны два списка:

x = [1,2,3]
y = [4,5,6]

Каков синтаксис:

  1. Вставить x в y так, чтобы y теперь выглядел как [1, 2, 3, [4, 5, 6]]?
  2. Вставить все элементы x в y так, чтобы y теперь выглядел как [1, 2, 3, 4, 5, 6]?

person Soumya    schedule 20.09.2010    source источник
comment
обратный списокB, оттуда [listA.insert (pos, x) для x в [listB]]   -  person John Mee    schedule 14.06.2011
comment
см. также это сообщение: stackoverflow.com/questions/5805892/   -  person Jos de Kloe    schedule 02.09.2014
comment
@JohnMee Вы имеете в виду listA.insert(pos, x) for x in listB[::-1]?   -  person wizzwizz4    schedule 21.06.2017


Ответы (6)


Вы имеете в виду append?

>>> x = [1,2,3]
>>> y = [4,5,6]
>>> x.append(y)
>>> x
[1, 2, 3, [4, 5, 6]]

Или слить?

>>> x = [1,2,3]
>>> y = [4,5,6]
>>> x + y
[1, 2, 3, 4, 5, 6]
>>> x.extend(y)
>>> x
[1, 2, 3, 4, 5, 6] 
person Paolo Bergantino    schedule 20.09.2010
comment
Это на месте или дает новый экземпляр? - person Daniel Möller; 16.05.2017
comment
x.extend(y) на месте, x+y возвращает новый список. И x += y, о котором здесь не упоминалось, похоже на расширение. - person wim; 22.07.2018

Вопрос не дает понять, чего именно вы хотите достичь.

List имеет метод append, который добавляет свой аргумент в список:

>>> list_one = [1,2,3]
>>> list_two = [4,5,6]
>>> list_one.append(list_two)
>>> list_one
[1, 2, 3, [4, 5, 6]]

Также существует метод extend, который добавляет элементы из списка, который вы передаете в качестве аргумента:

>>> list_one = [1,2,3]
>>> list_two = [4,5,6]
>>> list_one.extend(list_two)
>>> list_one
[1, 2, 3, 4, 5, 6]

И, конечно же, есть метод insert, который действует аналогично append, но позволяет указать точку вставки:

>>> list_one.insert(2, list_two)
>>> list_one
[1, 2, [4, 5, 6], 3, 4, 5, 6]

Чтобы расширить список в определенной точке вставки, вы можете использовать нарезку списка (спасибо, @florisla):

>>> l = [1, 2, 3, 4, 5]
>>> l[2:2] = ['a', 'b', 'c']
>>> l
[1, 2, 'a', 'b', 'c', 3, 4, 5]

Нарезка списка довольно гибкая, поскольку позволяет заменять диапазон записей в списке диапазоном записей из другого списка:

>>> l = [1, 2, 3, 4, 5]
>>> l[2:4] = ['a', 'b', 'c'][1:3]
>>> l
[1, 2, 'b', 'c', 5]
person Sergey    schedule 20.09.2010
comment
Если вы хотите «расширить» до определенной точки вставки, вы можете использовать синтаксис среза списка (см. stackoverflow.com/a/7376026/1075152) - person florisla; 18.10.2012
comment
Комментарий @florisla должен быть принятым ответом. Это единственный способ вставить список в другой список в произвольном месте (а не только в конце). - person weaver; 12.04.2016
comment
@weaver Хотя это единственное решение для выполнения этого (расширения по определенному индексу), это не был исходный вопрос. - person florisla; 15.09.2016
comment
@florisla Это педантизм. - person weaver; 15.09.2016

foo = [1, 2, 3]
bar = [4, 5, 6]

foo.append(bar) --> [1, 2, 3, [4, 5, 6]]
foo.extend(bar) --> [1, 2, 3, 4, 5, 6]

http://docs.python.org/tutorial/datastructures.html

person Coding District    schedule 20.09.2010
comment
как вставить планку через 2 и держать ее ровной? [1,2,4,5,6,3] - person DragonKnight; 19.10.2017

Вы также можете просто сделать ...

x += y
person user3707850    schedule 19.11.2017
comment
Это должен быть комментарий к принятому ответу, потому что в нем упоминается x + y, а x += y - это то же самое, но на месте. - person HTNW; 19.11.2017
comment
У меня нет репутации, чтобы делать это, но если кто-то другой может! - person user3707850; 08.02.2018

Если вы хотите добавить элементы в списке (list2) в конец другого списка (list), вы можете использовать метод расширения списка

list = [1, 2, 3]
list2 = [4, 5, 6]
list.extend(list2)
print list
[1, 2, 3, 4, 5, 6]

Или, если вы хотите объединить два списка, вы можете использовать знак +

list3 = list + list2
print list3
[1, 2, 3, 4, 5, 6]
person squal    schedule 12.10.2017

Если мы просто сделаем x.append(y), y будет ссылаться на x, так что любые изменения, внесенные в y, также повлияют на добавленный x. Итак, если нам нужно вставить только элементы, мы должны сделать следующее:

x = [1,2,3] y = [4,5,6] x.append(y[:])

person Raj Stha    schedule 15.03.2019