Pertanyaan Bagaimana cara menggabungkan dua daftar dengan Python?


Bagaimana cara menggabungkan dua daftar dengan Python?

Contoh:

listone = [1, 2, 3]
listtwo = [4, 5, 6]

Hasil yang diharapkan:

>>> joinedlist
[1, 2, 3, 4, 5, 6]

1637
2017-11-12 07:04


asal


Jawaban:


Anda dapat menggunakan + operator untuk menggabungkannya:

listone = [1,2,3]
listtwo = [4,5,6]

mergedlist = listone + listtwo

Keluaran:

>>> mergedlist
[1,2,3,4,5,6]

2694
2017-11-12 07:07



Anda juga dapat membuat generator yang hanya mengulang-ulang item di kedua daftar. Ini memungkinkan Anda untuk membuat daftar rantai (atau iterable apa pun) untuk diproses tanpa menyalin item ke daftar baru:

import itertools
for item in itertools.chain(listone, listtwo):
   # do something with each list item

214
2017-11-12 20:01



Anda dapat menggunakan set untuk mendapatkan daftar nilai unik yang digabungkan

mergedlist = list(set(listone + listtwo))

154
2017-09-20 08:43



Anda juga bisa menggunakan extend untuk menambahkan list tambahkan akhir dari yang lain:

listone = [1,2,3]
listtwo = [4,5,6]
mergedlist = []
mergedlist.extend(listone)
mergedlist.extend(listtwo)

99
2018-02-25 15:13



Python >= 3.5 alternatif: [*l1, *l2]

Meskipun ini adalah jawaban lama, alternatif lain telah diperkenalkan melalui penerimaan PEP 448 yang layak disebut.

PEP, berjudul Generalisasi Unpacking Tambahan, umumnya mengurangi beberapa pembatasan sintaksis saat menggunakan yang berbintang * ekspresi dengan Python; dengan itu, bergabung dengan dua daftar (berlaku untuk setiap iterable) sekarang dapat juga dilakukan dengan:

>>> l1 = [1, 2, 3]
>>> l2 = [4, 5, 6]

#unpack both iterables in a list literal
>>> joinedList = [*l1, *l2]
>>> print(joinedList)
[1, 2, 3, 4, 5, 6]

Fungsionalitas ini didefinisikan untuk Python 3.5 belum didukung untuk versi sebelumnya di 3.x keluarga. Dalam versi yang tidak didukung a SyntaxError akan dibangkitkan.

Seperti halnya pendekatan lain, ini juga menciptakan sebagai salinan dangkal dari unsur-unsur dalam daftar yang sesuai.


Itu terbalik untuk pendekatan ini adalah bahwa Anda benar-benar tidak perlu daftar untuk melakukan itu, apa pun yang dapat dilakukan iterable. Sebagaimana tercantum dalam PEP:

Ini juga berguna sebagai cara yang lebih mudah untuk menjumlahkan iterables menjadi a   daftar, seperti my_list + list(my_tuple) + list(my_range) yang sekarang   setara dengan adil [*my_list, *my_tuple, *my_range].

Jadi sambil menambahkan dengan + akan menaikkan TypeError karena ketiadaan mismatch:

l = [1, 2, 3]
r = range(4, 7)
res = l + r

Hal berikut tidak akan:

res = [*l, *r]

karena pertama kali akan mengekstrak isi dari iterables dan kemudian membuat a list dari isi.


94
2017-11-12 07:07



Ini cukup sederhana, saya pikir itu bahkan ditampilkan dalam tutorial:

>>> listone = [1,2,3]
>>> listtwo = [4,5,6]
>>>
>>> listone + listtwo
[1, 2, 3, 4, 5, 6]

57
2018-03-05 09:15



Anda cukup menggunakan + atau += operator sebagai berikut:

a = [1, 2, 3]
b = [4, 5, 6]

c = a + b

Atau:

c = []
a = [1, 2, 3]
b = [4, 5, 6]

c += (a + b)

Juga, jika Anda ingin nilai dalam daftar gabungan menjadi unik, Anda dapat melakukan:

c = list(set(a + b))

33
2017-10-09 23:21