Qual è la sintassi per inserire un elenco in un altro elenco in Python?


197

Dati due elenchi:

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

Qual è la sintassi per:

  1. Inserire xin modo ytale che yora sembra [1, 2, 3, [4, 5, 6]]?
  2. Inserire tutti gli elementi xin ytale che yora sembra [1, 2, 3, 4, 5, 6]?

lista inversa B, quindi [listaA.inserire (pos, x) per x in [listaB]]
John Mee


1
@JohnMee Intendi listA.insert(pos, x) for x in listB[::-1]?
wizzwizz4,

Risposte:


360

Intendi append?

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

O unire?

>>> 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
È in atto o genera una nuova istanza?
Daniel Möller,

7
x.extend(y)è in atto, x+yrestituisce un nuovo elenco. E x += y, che non è stato menzionato qui, è simile all'estensione.
mercoledì

86

La domanda non chiarisce che cosa esattamente vuoi raggiungere.

Elenco ha il appendmetodo, che aggiunge il suo argomento all'elenco:

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

C'è anche il extendmetodo, che aggiunge elementi dall'elenco che passi come argomento:

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

E, naturalmente, c'è il insertmetodo che agisce in modo simile appendma consente di specificare il punto di inserimento:

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

Per estendere un elenco in un punto di inserimento specifico è possibile utilizzare la suddivisione in elenchi (grazie, @florisla):

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

La suddivisione in elenchi è abbastanza flessibile in quanto consente di sostituire un intervallo di voci in un elenco con un intervallo di voci di un altro elenco:

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

34
Se si vuole 'estendere' ad un punto di inserimento specifico, è possibile utilizzare la sintassi lista slicing (vedi stackoverflow.com/a/7376026/1075152 )
florisla

5
Il commento di @ florisla dovrebbe essere la risposta accettata. È l'unico modo per inserire un elenco in un altro elenco in atto in una posizione arbitraria (non solo alla fine).
tessitore,

1
@weaver Mentre è l'unica soluzione per fare che (estendere a un indice specifico), che non era la domanda originale.
florisla,

@florisla Questa è pedanteria.
tessitore,


3

Puoi anche solo fare ...

x += y

Questo dovrebbe essere un commento sulla risposta accettata, perché quello menziona x + yed x += yè esattamente la stessa cosa ma sul posto.
HTNW,

Non ho la reputazione di farlo, ma se qualcun altro può farlo!
user3707850

2

Se si desidera aggiungere gli elementi in un elenco (elenco2) alla fine dell'altro elenco (elenco), è possibile utilizzare il metodo di estensione elenco

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

Oppure, se si desidera concatenare due elenchi, è possibile utilizzare + segno

list3 = list + list2
print list3
[1, 2, 3, 4, 5, 6]

0

Se lo facciamo x.append(y), y viene referenziato in x in modo tale che qualsiasi modifica apportata a y influisca anche su x aggiunto. Quindi, se dobbiamo inserire solo elementi, dovremmo fare quanto segue:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.