>>> big = [[1, '34', '44'], [1, '40', '30', '41'], [1, '41', '40', '42'], [1, '42', '41', '43'], [1, '43', '42', '44'], [1, '44', '34', '43']]
>>> set[reduce [ lambda l,a : l + a, big]]
set[[1, '44', '30', '42', '43', '40', '41', '34']]
Và nếu bạn thực sự muốn một danh sách một danh sách là kết quả cuối cùng
>>>>[list[set[reduce [ lambda l,a : l + a, big]]]]
[[1, '44', '30', '42', '43', '40', '41', '34']]
Và nếu bạn không thích mã hóa chức năng Lambda để bổ sung danh sách:
>>>>[list[set[reduce [ list.__add__, big]]]]
[[1, '44', '30', '42', '43', '40', '41', '34']]
Chỉnh sửa: Sau khi bạn đề xuất về việc sử dụng itertools.chain thay vì danh sách .__ add__ Tôi đã chạy một thời gian cho cả hai với biến ban đầu được sử dụng bởi poster gốc. : after your recommendation about using itertools.chain instead of list.__add__ I ran a timeit for both with the original variable used by the original poster.
Có vẻ như danh sách thời gian thời gian .__ Thêm khoảng 2,8s và itertools.chain khoảng 3,5 giây.
Tôi đã kiểm tra trên trang này và vâng, bạn đã đúng với itertools.chain chứa một phương thức từ_iterable cung cấp một sự tăng cường hiệu suất rất lớn. Xem bên dưới với Danh sách.
>>> timeit.timeit["[list[set[reduce [ list.__add__, big]]]]", setup="big = [ [10,20,30,40] for ele in range[10000]]", number=30]
16.051744650801993
>>> timeit.timeit["[list[set[reduce [ itertools.chain, big]]]]", setup="big = [ [10,20,30,40] for ele in range[10000]]", number=30]
54.721315866467194
>>> timeit.timeit["list[set[itertools.chain.from_iterable[big]]]", setup="big = [ [10,20,30,40] for ele in range[10000]]", number=30]
0.040056066849501804
Cảm ơn bạn rất nhiều vì lời khuyên của bạn :]
Đưa ra nhiều danh sách bộ, nhiệm vụ là viết một chương trình Python để tìm sự kết hợp của mỗi bộ.
Examples:
Đầu vào: test_list = [{4, 3, 5, 2}, {8, 4, 7, 2}, {1, 2, 3, 4}, {9, 5, 3, 7}]] test_list = [{4, 3, 5, 2}, {8, 4, 7, 2}, {1, 2, 3, 4}, {9, 5, 3, 7}]
Đầu ra: {1, 2, 3, 4, 5, 7, 8, 9} {1, 2, 3, 4, 5, 7, 8, 9}
Giải thích: Tất cả các yếu tố từ tất cả các bộ bao gồm. Sao chép loại bỏ. All elements from all sets included. Duplicates removed.
Đầu vào: test_list = [{4, 3, 5, 2}, {8, 4, 7, 2}, {1, 2, 3, 4}]] test_list = [{4, 3, 5, 2}, {8, 4, 7, 2}, {1, 2, 3, 4}]
Đầu ra: {1, 2, 3, 4, 5, 7, 8} {1, 2, 3, 4, 5, 7, 8}
Giải thích: Tất cả các yếu tố từ tất cả các bộ bao gồm. Sao chép loại bỏ. All elements from all sets included. Duplicates removed.
Đầu vào: test_list = [{4, 3, 5, 2}, {8, 4, 7, 2}, {1, 2, 3, 4}]]union[] + * operator
Đầu ra: {1, 2, 3, 4, 5, 7, 8}
Python3
Phương pháp số 1: Sử dụng toán tử Union [] + *
Trong đó, chúng tôi thực hiện nhiệm vụ nhận công đoàn bằng công đoàn [] và * toán tử được sử dụng để thực hiện nhiệm vụ đóng gói tất cả các bộ cùng nhau.
test_list
=
>>> timeit.timeit["[list[set[reduce [ list.__add__, big]]]]", setup="big = [ [10,20,30,40] for ele in range[10000]]", number=30]
16.051744650801993
>>> timeit.timeit["[list[set[reduce [ itertools.chain, big]]]]", setup="big = [ [10,20,30,40] for ele in range[10000]]", number=30]
54.721315866467194
>>> timeit.timeit["list[set[itertools.chain.from_iterable[big]]]", setup="big = [ [10,20,30,40] for ele in range[10000]]", number=30]
0.040056066849501804
9test_list
0test_list
1 test_list
2 test_list
3test_list
4Output:
test_list
5=
test_list
7test_list
8test_list
9=
09>>> timeit.timeit["[list[set[reduce [ list.__add__, big]]]]", setup="big = [ [10,20,30,40] for ele in range[10000]]", number=30] 16.051744650801993 >>> timeit.timeit["[list[set[reduce [ itertools.chain, big]]]]", setup="big = [ [10,20,30,40] for ele in range[10000]]", number=30] 54.721315866467194 >>> timeit.timeit["list[set[itertools.chain.from_iterable[big]]]", setup="big = [ [10,20,30,40] for ele in range[10000]]", number=30] 0.040056066849501804
test_list
0=
3test_list
2test_list
3=
6
Danh sách ban đầu là: [{2, 3, 4, 5}, {8, 2, 4, 7}, {1, 2, 3, 4}, {9, 3, 5, 7}]]chain.from_iterable[] + * operator
Đa bộ liên kết: {1, 2, 3, 4, 5, 7, 8, 9}
Python3
Phương pháp số 2: Sử dụng Trình điều khiển chuỗi.From_Iterable [] + *
Phương pháp số 1: Sử dụng toán tử Union [] + *
Trong đó, chúng tôi thực hiện nhiệm vụ nhận công đoàn bằng công đoàn [] và * toán tử được sử dụng để thực hiện nhiệm vụ đóng gói tất cả các bộ cùng nhau.
test_list
=
>>> timeit.timeit["[list[set[reduce [ list.__add__, big]]]]", setup="big = [ [10,20,30,40] for ele in range[10000]]", number=30]
16.051744650801993
>>> timeit.timeit["[list[set[reduce [ itertools.chain, big]]]]", setup="big = [ [10,20,30,40] for ele in range[10000]]", number=30]
54.721315866467194
>>> timeit.timeit["list[set[itertools.chain.from_iterable[big]]]", setup="big = [ [10,20,30,40] for ele in range[10000]]", number=30]
0.040056066849501804
9test_list
0test_list
1 test_list
2 test_list
3test_list
4Output:
test_list
5=
test_list
7test_list
8test_list
9=
09>>> timeit.timeit["[list[set[reduce [ list.__add__, big]]]]", setup="big = [ [10,20,30,40] for ele in range[10000]]", number=30] 16.051744650801993 >>> timeit.timeit["[list[set[reduce [ itertools.chain, big]]]]", setup="big = [ [10,20,30,40] for ele in range[10000]]", number=30] 54.721315866467194 >>> timeit.timeit["list[set[itertools.chain.from_iterable[big]]]", setup="big = [ [10,20,30,40] for ele in range[10000]]", number=30] 0.040056066849501804
test_list
0=
3test_list
2test_list
3=
6