Jaka jest składnia wstawiania jednej listy do innej listy w Pythonie?

197

Biorąc pod uwagę dwie listy:

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

Jaka jest składnia:

  1. Wstaw xdo ytakiego, który yteraz wygląda [1, 2, 3, [4, 5, 6]]?
  2. Wstaw wszystkie elementy xdo ytakich, które yteraz wyglądają [1, 2, 3, 4, 5, 6]?
Soumya
źródło
reverse listB, stąd [listA.insert (pos, x) for x in [listB]]
John Mee
zobacz także ten post: stackoverflow.com/questions/5805892/...
Jos de Kloe
1
@JohnMee Masz na myśli listA.insert(pos, x) for x in listB[::-1]?
wizzwizz4,

Odpowiedzi:

360

Czy masz na myśli append?

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

Lub połączyć?

>>> 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] 
Paolo Bergantino
źródło
3
Czy to jest na miejscu, czy daje nową instancję?
Daniel Möller
7
x.extend(y)jest na miejscu, x+yzwraca nową listę. I x += y, o czym tu nie wspomniano, jest podobny do rozszerzenia.
wim
85

Pytanie nie wyjaśnia, co dokładnie chcesz osiągnąć.

Lista ma appendmetodę, która dołącza swój argument do listy:

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

Istnieje również extendmetoda, która dołącza elementy z listy, którą podajesz jako argument:

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

Oczywiście istnieje insertmetoda, która działa podobnie, appendale pozwala określić punkt wstawienia:

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

Aby rozszerzyć listę w określonym punkcie wstawiania, możesz użyć podziału na listy (dzięki, @florisla):

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

Podział listy jest dość elastyczny, ponieważ pozwala zastąpić zakres wpisów na liście zakresem wpisów z innej listy:

>>> l = [1, 2, 3, 4, 5]
>>> l[2:4] = ['a', 'b', 'c'][1:3]
>>> l
[1, 2, 'b', 'c', 5]
Siergiej
źródło
34
Jeśli chcesz „rozszerzyć” do określonego punktu wstawiania, możesz użyć składni wycinania list (patrz stackoverflow.com/a/7376026/1075152 )
florisla,
5
Komentarz @ florisla powinien być zaakceptowaną odpowiedzią. Jest to jedyny sposób na wstawienie listy do innej listy w dowolnym miejscu (nie tylko na końcu).
tkacz
1
@weaver Choć jest to jedyne rozwiązanie, aby zrobić to (rozciągają się na indeksie szczególnego), który nie był oryginalny pytanie.
florisla
@florisla To pedanteria.
tkacz
3

Możesz też po prostu zrobić ...

x += y
użytkownik3707850
źródło
Powinien to być komentarz do zaakceptowanej odpowiedzi, ponieważ ta wspomina x + yi x += yjest dokładnie taka sama, ale na miejscu.
HTNW,
Nie mam takiej reputacji, ale jeśli ktoś inny może!
user3707850
2

Jeśli chcesz dodać elementy z listy (list2) na końcu innej listy (listy), możesz użyć metody rozszerzenia listy

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

Lub jeśli chcesz połączyć dwie listy, możesz użyć znaku +

list3 = list + list2
print list3
[1, 2, 3, 4, 5, 6]
squal
źródło
0

Jeśli po prostu to zrobimy x.append(y), y zostanie odniesione do x, tak że wszelkie zmiany dokonane w y wpłyną również na dołączony x. Więc jeśli musimy wstawić tylko elementy, powinniśmy wykonać następujące czynności:

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

Raj Stha
źródło