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


197

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

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]?

обратный список B, отсюда [listA.insert (pos, x) для x в [listB]]
Джон Ми

см. также этот пост: stackoverflow.com/questions/5805892/…
Джос де Кло

1
@JohnMee Вы имеете в виду listA.insert(pos, x) for x in listB[::-1]?
wizzwizz4

Ответы:


360

Вы имеете в виду 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] 

3
Это на месте или дает новый экземпляр?
Даниэль Мёллер

7
x.extend(y)находится на месте, x+yвозвращает новый список. И x += y, что здесь не упоминалось, похоже на расширение.
Вим

86

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

Список имеет 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]

34
Если вы хотите , чтобы «расширить» до точки вставки конкретно, вы можете использовать список нарезки синтаксиса (см stackoverflow.com/a/7376026/1075152 )
florisla

5
@ florisla комментарий должен быть принятым ответом. Это единственный способ вставить список в другой список в произвольном месте (не только в конце).
ткач

1
@weaver Хотя это единственное решение сделать что (продлить на индекс конкретного), который был не оригинальный вопрос.
Флорисла

@florisla Это педантизм.
ткач


3

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

x += y

Это должен быть комментарий к принятому ответу, потому что он упоминает x + yи x += yэто то же самое, но на месте.
HTNW

У меня нет репутации, чтобы сделать это, но если кто-то может!
user3707850

2

Если вы хотите добавить элементы в списке (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]

0

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.