Bagaimana saya bisa mendapatkan rangkaian dari dua list di Python tanpa memodifikasi salah satu?

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?

Larutan

Ya: list1+list2. Hal ini memberikan sebuah daftar baru yang merupakan rangkaian dari list1 dan list2.

Komentar (5)

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.

Komentar (1)

concatenated_list = list_1 + list_2

Komentar (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 "", line 1, in 
TypeError: sum() can't sum strings [use ''.join(seq) instead]
Komentar (2)

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.

Komentar (1)

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.

Komentar (0)

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.

Komentar (0)