Tôi có một danh sách các danh sách:
lists = [[1,4,3,2,4], [4,5]]
Tôi muốn làm phẳng danh sách này và xóa tất cả các bản sao; Hoặc, nói cách khác, áp dụng một hoạt động liên minh đã thiết lập:
desired_result = [1, 2, 3, 4, 5]
Cách dễ nhất để làm điều này là gì?
Georgy
10,9k7 Huy hiệu vàng62 Huy hiệu bạc68 Huy hiệu Đồng7 gold badges62 silver badges68 bronze badges
hỏi ngày 28 tháng 1 năm 2010 lúc 0:44Jan 28, 2010 at 0:44
desired_result = [1, 2, 3, 4, 5]
0 làm những gì bạn muốn:>>> results_list = [[1,2,3], [1,2,4]]
>>> results_union = set[].union[*results_list]
>>> print[results_union]
set[[1, 2, 3, 4]]
Bạn cũng có thể làm điều này với nhiều hơn hai danh sách.
Aran-Fey
36.6K11 Huy hiệu vàng96 Huy hiệu bạc141 Huy hiệu đồng11 gold badges96 silver badges141 bronze badges
Đã trả lời ngày 28 tháng 1 năm 2010 lúc 0:54Jan 28, 2010 at 0:54
STHSTHsth
Phim thương hiệu vàng 215k5050 gold badges273 silver badges363 bronze badges
10
Vì bạn dường như đang sử dụng Python 2.5 [thật tuyệt khi được đề cập trong Q của bạn nếu bạn cần A cho phiên bản! = 2.6, nhân tiện sản xuất hiện tại ;-] và muốn một danh sách thay vì một bộ Kết quả, tôi đề xuất:would be nice to mention in your Q if you need an A for versions != 2.6, the current production one, by the way;-] and want a list rather than a set as the result, I recommend:
import itertools
...
return list[set[itertools.chain[*result_list]]]
Itertools nói chung là một cách tuyệt vời để làm việc với các trình lặp lại [và vì vậy với nhiều loại trình tự hoặc bộ sưu tập] và tôi chân thành khuyên bạn nên làm quen với nó.
desired_result = [1, 2, 3, 4, 5]
1, đặc biệt, được ghi lại ở đây.
yatu
82.6K12 Huy hiệu vàng71 Huy hiệu bạc119 Huy hiệu đồng12 gold badges71 silver badges119 bronze badges
Đã trả lời ngày 28 tháng 1 năm 2010 lúc 3:38Jan 28, 2010 at 3:38
Alex Martellialex MartelliAlex Martelli
825K163 Huy hiệu vàng1203 Huy hiệu bạc1381 Huy hiệu Đồng163 gold badges1203 silver badges1381 bronze badges
3
Bạn cũng có thể theo phong cách này
In [12]: a = ['Orange and Banana', 'Orange Banana']
In [13]: b = ['Grapes', 'Orange Banana']
In [14]: c = ['Foobanana', 'Orange and Banana']
In [20]: list[set[a] | set[b] | set[c]]
Out[20]: ['Orange and Banana', 'Foobanana', 'Orange Banana', 'Grapes']
In [21]: list[set[a] & set[b] | set[c]]
Out[21]: ['Orange and Banana', 'Foobanana', 'Orange Banana']
Đã trả lời ngày 1 tháng 3 năm 2016 lúc 12:13Mar 1, 2016 at 12:13
GrvtyagigrvtyagiGrvTyagi
4.05333 Huy hiệu bạc37 Huy hiệu đồng33 silver badges37 bronze badges
theo cách hiểu:
[*{ j for i in lists for j in i }]
hoặc
[*functools.reduce[lambda x,y: {*x, *y}, lists]]
Đã trả lời ngày 21 tháng 6 năm 2020 lúc 7:02Jun 21, 2020 at 7:02
RandyrandyRandy
Huy hiệu Huy hiệu Bạc 14111 silver badge2 bronze badges
0
Các công đoàn không được hỗ trợ bởi các danh sách, được đặt hàng, nhưng được hỗ trợ bởi các bộ. Kiểm tra set.union.
Đã trả lời ngày 28 tháng 1 năm 2010 lúc 0:53Jan 28, 2010 at 0:53
Justin R.Justin R.Justin R.
22.9K23 Huy hiệu vàng106 Huy hiệu bạc154 Huy hiệu đồng23 gold badges106 silver badges154 bronze badges
0
Tôi đã sử dụng những điều sau đây để thực hiện các giao lộ, giúp tránh sự cần thiết của các bộ.
a, b= [[1,2,3], [1,2]]
s = filter[ lambda x: x in b, a]
or,
s = [ x for x in b if x in a ]
Đã trả lời ngày 28 tháng 1 năm 2010 lúc 0:58Jan 28, 2010 at 0:58
Gấu gấuBear
1.1077 huy hiệu bạc11 huy hiệu đồng7 silver badges11 bronze badges
3
desired_result = [x for y in lists for x in y]
Dharman ♦♦
28.1K21 Huy hiệu vàng75 Huy hiệu bạc127 Huy hiệu đồng21 gold badges75 silver badges127 bronze badges
Đã trả lời ngày 3 tháng 8 năm 2019 lúc 9:41Aug 3, 2019 at 9:41