258
Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.
Tôi gặp khó khăn khi quấn đầu quanh một thuật toán mà tôi cố gắng thực hiện. Tôi có hai danh sách và muốn lấy các kết hợp cụ thể từ hai danh sách.
Đây là một ví dụ.
names = ['a', 'b']
numbers = [1, 2]
Đầu ra trong trường hợp này sẽ là:
[['a', 1], ['b', 2]]
[['b', 1], ['a', 2]]
Tôi có thể có nhiều tên hơn số, tức là
names = ['a', 'b', 'c']
numbers = [1, 2]
1. Đây là một ví dụ với 3 tên và 2 số:names = ['a', 'b', 'c']
numbers = [1, 2]
output:
[['a', 1], ['b', 2]]
[['b', 1], ['a', 2]]
[['a', 1], ['c', 2]]
[['c', 1], ['a', 2]]
[['b', 1], ['c', 2]]
[['c', 1], ['b', 2]]
hỏi ngày 17 tháng 10 năm 2012 lúc 13:16Oct 17, 2012 at 13:16
10
Cách đơn giản nhất là sử dụng
names = ['a', 'b', 'c']
numbers = [1, 2]
2:a = ["foo", "melon"]
b = [True, False]
c = list[itertools.product[a, b]]
>> [["foo", True], ["foo", False], ["melon", True], ["melon", False]]
Pixelistik
7.3153 Huy hiệu vàng31 Huy hiệu bạc41 Huy hiệu đồng3 gold badges31 silver badges41 bronze badges
Đã trả lời ngày 1 tháng 12 năm 2015 lúc 23:57Dec 1, 2015 at 23:57
DridkdridkDrIDK
7.2412 Huy hiệu vàng14 Huy hiệu bạc12 Huy hiệu đồng2 gold badges14 silver badges12 bronze badges
4
Có thể đơn giản hơn cái đơn giản nhất ở trên:
>>> a = ["foo", "bar"]
>>> b = [1, 2, 3]
>>> [[x,y] for x in a for y in b] # for a list
[['foo', 1], ['foo', 2], ['foo', 3], ['bar', 1], ['bar', 2], ['bar', 3]]
>>> [[x,y] for x in a for y in b] # for a generator if you worry about memory or time complexity.
mà không có bất kỳ nhập khẩu
Đã trả lời ngày 21 tháng 8 năm 2016 lúc 13:33Aug 21, 2016 at 13:33
logiclogiclogic
2.4091 Huy hiệu vàng11 Huy hiệu bạc 51 gold badge11 silver badges5 bronze badges
5
Lưu ý: Câu trả lời này là cho câu hỏi cụ thể được hỏi ở trên. Nếu bạn ở đây từ Google và chỉ tìm cách để có được một sản phẩm Cartesian ở Python,
2 hoặc một danh sách hiểu đơn giản có thể là những gì bạn đang tìm kiếm - xem các câu trả lời khác.: This answer is for the specific question asked above. If you are here from Google and just looking for a way to get a Cartesian product in Python, names = ['a', 'b', 'c']
numbers = [1, 2]
names = ['a', 'b', 'c']
numbers = [1, 2]
2 or a simple list comprehension may be what you are looking for - see the other answers.Giả sử
names = ['a', 'b', 'c']
numbers = [1, 2]
4. Sau đó, những gì bạn dường như muốn là lấy tất cả các hoán vị có độ dài names = ['a', 'b', 'c']
numbers = [1, 2]
5 từ names = ['a', 'b', 'c']
numbers = [1, 2]
6 và kết hợp chúng với các mục từ List2. Trong Python:import itertools
list1=['a','b','c']
list2=[1,2]
[list[zip[x,list2]] for x in itertools.permutations[list1,len[list2]]]
Trả lại
[[['a', 1], ['b', 2]], [['a', 1], ['c', 2]], [['b', 1], ['a', 2]], [['b', 1], ['c', 2]], [['c', 1], ['a', 2]], [['c', 1], ['b', 2]]]
Hóa đơn
9.0937 Huy hiệu vàng54 Huy hiệu bạc77 Huy hiệu đồng7 gold badges54 silver badges77 bronze badges
Đã trả lời ngày 17 tháng 10 năm 2012 lúc 13:35Oct 17, 2012 at 13:35
Interjayinterjayinterjay
103K21 Huy hiệu vàng256 Huy hiệu bạc249 Huy hiệu Đồng21 gold badges256 silver badges249 bronze badges
7
Tôi đã tìm kiếm một danh sách nhân với chính nó chỉ với các kết hợp duy nhất, được cung cấp dưới dạng chức năng này.
import itertools
itertools.combinations[list, n_times]
Ở đây như một đoạn trích từ các tài liệu Python trên
names = ['a', 'b', 'c']
numbers = [1, 2]
7 có thể giúp bạn tìm thấy những gì bạn đang tìm kiếm.Combinatoric generators:
Iterator | Results
-----------------------------------------+----------------------------------------
product[p, q, ... [repeat=1]] | cartesian product, equivalent to a
| nested for-loop
-----------------------------------------+----------------------------------------
permutations[p[, r]] | r-length tuples, all possible
| orderings, no repeated elements
-----------------------------------------+----------------------------------------
combinations[p, r] | r-length tuples, in sorted order, no
| repeated elements
-----------------------------------------+----------------------------------------
combinations_with_replacement[p, r] | r-length tuples, in sorted order,
| with repeated elements
-----------------------------------------+----------------------------------------
product['ABCD', repeat=2] | AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD
permutations['ABCD', 2] | AB AC AD BA BC BD CA CB CD DA DB DC
combinations['ABCD', 2] | AB AC AD BC BD CD
combinations_with_replacement['ABCD', 2] | AA AB AC AD BB BC BD CC CD DD
Đã trả lời ngày 29 tháng 11 năm 2016 lúc 21:52Nov 29, 2016 at 21:52
ThorsummonerthorsummonerThorSummoner
15.2K14 Huy hiệu vàng130 Huy hiệu bạc138 Huy hiệu đồng14 gold badges130 silver badges138 bronze badges
Cách tốt nhất để tìm hiểu tất cả các kết hợp cho số lượng lớn danh sách là:
[['a', 1], ['b', 2]]
[['b', 1], ['a', 2]]
0Kết quả sẽ là:
[['a', 1], ['b', 2]]
[['b', 1], ['a', 2]]
1Đã trả lời ngày 24 tháng 7 năm 2019 lúc 9:07Jul 24, 2019 at 9:07
Ishan Rastogiishan RastogiIshan Rastogi
7902 Huy hiệu vàng7 Huy hiệu bạc17 Huy hiệu đồng2 gold badges7 silver badges17 bronze badges
1
Hoặc câu trả lời của KISS cho các danh sách ngắn:
[['a', 1], ['b', 2]]
[['b', 1], ['a', 2]]
2Không hiệu suất như itertools nhưng bạn đang sử dụng python nên hiệu suất đã không phải là mối quan tâm hàng đầu của bạn ...
Tôi cũng thích tất cả các câu trả lời khác!
Đã trả lời ngày 29 tháng 7 năm 2019 lúc 17:50Jul 29, 2019 at 17:50
Bạn có thể muốn thử một danh sách một dòng hiểu:
[['a', 1], ['b', 2]]
[['b', 1], ['a', 2]]
3Đã trả lời ngày 10 tháng 1 năm 2017 lúc 19:26Jan 10, 2017 at 19:26
IdanmelidanmelIdanmel
4725 Huy hiệu bạc12 Huy hiệu Đồng5 silver badges12 bronze badges
Một cải tiến nhỏ cho câu trả lời từ Interjay, để làm cho kết quả như một danh sách phẳng.
[['a', 1], ['b', 2]]
[['b', 1], ['a', 2]]
4Tham khảo từ liên kết này
Đã trả lời ngày 19 tháng 12 năm 2013 lúc 15:02Dec 19, 2013 at 15:02
Zhoumass ZhouMass Zhou
3493 Huy hiệu bạc6 Huy hiệu Đồng3 silver badges6 bronze badges
Không có
names = ['a', 'b', 'c']
numbers = [1, 2]
7 như một danh sách phẳng:[['a', 1], ['b', 2]]
[['b', 1], ['a', 2]]
5hoặc trong Python 2:Python 2:
[['a', 1], ['b', 2]]
[['b', 1], ['a', 2]]
6
Đã trả lời ngày 11 tháng 3 năm 2016 lúc 11:32Mar 11, 2016 at 11:32
user3684792user3684792user3684792
2.4642 Huy hiệu vàng17 Huy hiệu bạc22 Huy hiệu đồng2 gold badges17 silver badges22 bronze badges
Trả lời câu hỏi "Đưa ra hai danh sách, tìm tất cả các hoán vị có thể của các cặp một mục từ mỗi danh sách" và sử dụng chức năng Python cơ bản [nghĩa là không có itertools] và do đó, giúp dễ dàng sao chép cho các ngôn ngữ lập trình khác:
[['a', 1], ['b', 2]]
[['b', 1], ['a', 2]]
7Trả lại
[['a', 1], ['b', 2]]
[['b', 1], ['a', 2]]
8Hóa đơnMar 11, 2018 at 10:11
9.0937 Huy hiệu vàng54 Huy hiệu bạc77 Huy hiệu đồngcomputerist
Đã trả lời ngày 17 tháng 10 năm 2012 lúc 13:358 silver badges9 bronze badges
Interjayinterjay
103K21 Huy hiệu vàng256 Huy hiệu bạc249 Huy hiệu Đồng
[['a', 1], ['b', 2]]
[['b', 1], ['a', 2]]
9Tôi đã tìm kiếm một danh sách nhân với chính nó chỉ với các kết hợp duy nhất, được cung cấp dưới dạng chức năng này.
names = ['a', 'b', 'c']
numbers = [1, 2]
0Ở đây như một đoạn trích từ các tài liệu Python trên
names = ['a', 'b', 'c']
numbers = [1, 2]
7 có thể giúp bạn tìm thấy những gì bạn đang tìm kiếm.Aug 5, 2019 at 16:12
Đã trả lời ngày 29 tháng 11 năm 2016 lúc 21:52Steve Alexander
Thorsummonerthorsummoner1 gold badge8 silver badges6 bronze badges