Di Python, satu-satunya cara yang saya bisa menemukan untuk menggabungkan dua daftar daftar.memperpanjang
, yang memodifikasi daftar pertama. Apakah ada rangkaian fungsi yang mengembalikan hasilnya tanpa memodifikasi argumen?
Tergantung pada bagaimana anda're akan menggunakannya setelah itu's dibuat itertools.rantai
mungkin menjadi taruhan terbaik anda:
>>> import itertools
>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> c = itertools.chain(a, b)
Hal ini menciptakan sebuah generator untuk item dalam daftar gabungan, yang memiliki keuntungan bahwa tidak ada yang baru daftar kebutuhan yang akan dibuat, tetapi anda masih dapat menggunakan c
seolah-olah itu adalah gabungan dari dua daftar:
>>> for i in c:
... print i
1
2
3
4
5
6
Jika daftar anda adalah besar dan efisiensi adalah perhatian saat ini dan metode lain dari itertools
modul yang sangat berguna untuk mengetahui.
Perhatikan bahwa contoh ini menggunakan item di c
, sehingga anda'd perlu reinitialise itu sebelum anda dapat menggunakannya kembali. Tentu saja anda hanya dapat menggunakan daftar(c)
untuk membuat daftar lengkap, tapi itu akan membuat daftar baru di memori.
concatenated_list = list_1 + list_2
Anda juga dapat menggunakan jumlah
, jika anda memberikan start
argumen:
>>> list1, list2, list3 = [1,2,3], ['a','b','c'], [7,8,9]
>>> all_lists = sum([list1, list2, list3], [])
>>> all_lists
[1, 2, 3, 'a', 'b', 'c', 7, 8, 9]
Karya ini secara umum untuk apa pun yang memiliki +
operator:
>>> sum([(1,2), (1,), ()], ())
(1, 2, 1)
>>> sum([Counter('123'), Counter('234'), Counter('345')], Counter())
Counter({'1':1, '2':2, '3':3, '4':2, '5':1})
>>> sum([True, True, False], False)
2
Dengan pengecualian dari string:
>>> sum(['123', '345', '567'], '')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sum() can't sum strings [use ''.join(seq) instead]
anda selalu bisa membuat daftar baru yang merupakan hasil dari menambahkan dua daftar.
>>> k = [1,2,3] + [4,7,9]
>>> k
[1, 2, 3, 4, 7, 9]
Daftar urutan bisa berubah jadi saya kira itu masuk akal untuk memodifikasi asli daftar dengan memperpanjang atau append.
Dan jika anda memiliki lebih dari dua daftar untuk menggabungkan:
import operator
list1, list2, list3 = [1,2,3], ['a','b','c'], [7,8,9]
reduce(operator.add, [list1, list2, list3])
# or with an existing list
all_lists = [list1, list2, list3]
reduce(operator.add, all_lists)
Itu doesn't benar-benar menghemat waktu (intermediate daftar masih dibuat) tapi lebih baik jika anda memiliki variabel jumlah daftar untuk meratakan, misalnya, *args
.
Hanya untuk membiarkan anda tahu:
Ketika anda menulis list1 + list2
, anda menelepon __add__
metode list1
, yang mengembalikan daftar baru. dengan cara ini anda juga dapat bergerak dengan myobject + list1
dengan menambahkan __add__
metode untuk anda pribadi kelas.