Apa sintaksis untuk memasukkan satu daftar ke daftar lain dengan python?

197

Diberikan dua daftar:

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

Apa sintaks untuk:

  1. Masukkan xke dalam yyang ysekarang terlihat seperti [1, 2, 3, [4, 5, 6]]?
  2. Masukkan semua item xke dalam yyang ysekarang terlihat seperti [1, 2, 3, 4, 5, 6]?
Soumya
sumber
membalikkan listB, dari situ [listA.insert (pos, x) untuk x di [listB]]
John Mee
lihat juga posting ini: stackoverflow.com/questions/5805892/…
Jos de Kloe
1
@ JohnMee Maksud Anda listA.insert(pos, x) for x in listB[::-1]?
wizzwizz4

Jawaban:

360

Apakah yang Anda maksud append?

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

Atau bergabung?

>>> 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
sumber
3
Apakah itu ada atau menghasilkan contoh baru?
Daniel Möller
7
x.extend(y)sudah ada, x+ymengembalikan daftar baru. Dan x += y, yang tidak disebutkan di sini, mirip dengan perpanjangan.
wim
85

Pertanyaannya tidak memperjelas apa yang sebenarnya ingin Anda capai.

Daftar memiliki appendmetode, yang menambahkan argumennya ke daftar:

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

Ada juga extendmetode, yang menambahkan item dari daftar yang Anda berikan sebagai argumen:

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

Dan tentu saja, ada insertmetode yang bertindak serupa appendtetapi memungkinkan Anda untuk menentukan titik penyisipan:

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

Untuk memperpanjang daftar pada titik penyisipan tertentu, Anda dapat menggunakan pemotongan daftar (terima kasih, @florisla):

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

Pengirisan daftar cukup fleksibel karena memungkinkan untuk mengganti berbagai entri dalam daftar dengan berbagai entri dari daftar lain:

>>> l = [1, 2, 3, 4, 5]
>>> l[2:4] = ['a', 'b', 'c'][1:3]
>>> l
[1, 2, 'b', 'c', 5]
Sergey
sumber
34
Jika Anda ingin 'memperluas' ke titik penyisipan tertentu, Anda dapat menggunakan sintaksis slicing daftar (lihat stackoverflow.com/a/7376026/1075152 )
florisla
5
Komentar @ florisla harusnya menjadi jawaban yang diterima. Ini satu-satunya cara untuk memasukkan daftar ke daftar lain di tempat di lokasi sewenang-wenang (bukan hanya di akhir).
penenun
1
@weaver Sementara itu satu-satunya solusi untuk melakukan itu (diperluas pada indeks tertentu), itu bukan pertanyaan awal.
florisla
@florisla Itu kesopanan.
penenun
31
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

Distrik Pengkodean
sumber
bagaimana Anda memasukkan bilah setelah 2 dan menjaganya tetap rata? [1,2,4,5,6,3]
DragonKnight
3

Anda juga bisa melakukan ...

x += y
pengguna3707850
sumber
Ini harus menjadi komentar pada jawaban yang diterima, karena yang satu menyebutkan x + ydan x += ysama saja tetapi di tempat.
HTNW
Saya tidak memiliki reputasi untuk melakukan itu, tetapi jika orang lain bisa!
user3707850
2

Jika Anda ingin menambahkan elemen dalam daftar (list2) ke akhir daftar lainnya (daftar), maka Anda dapat menggunakan metode rentangkan daftar

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

Atau jika Anda ingin menggabungkan dua daftar maka Anda dapat menggunakan tanda +

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

Jika kita lakukan x.append(y), y direferensikan ke x sehingga setiap perubahan yang dilakukan pada y akan mempengaruhi ditambahkan juga x. Jadi jika kita hanya perlu memasukkan elemen, kita harus melakukan hal berikut:

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

Raj Stha
sumber