Який синтаксис для вставки одного списку до іншого списку в 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/…
Jos de Kloe

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 = [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.