[英]How to find all unique combinations of k size tuple using a single element from each list of n lists
[英]How to pull all the unique combinations from a list of lists
我想迭代一個列表列表,並從列表中提取所有組合。
我可以通過以下方式完成:
list = [['1','2','3'],['a','b','c'],['x','y','z']]
for itemi in list[0]:
print itemi
for itemj in list[1]:
print itemi+itemj
for itemk in list[2]:
print itemi+itemj+itemk
我的問題是我希望在列表列表中的不同數量的列表上執行此操作。 首先會有一個列表,(現在)以64個列表結束。
上面的示例適用於3個列表,實際上所有列表都包含相同的值(0到255)。 我使用了上面的示例,這樣您就可以看到輸出應該是什么樣子了。
我認為必須有一個更好的方法,而不必為每個列表的列表構建嵌套的for循環。
>>> l = [['1','2','3'],['a','b','c'],['x','y','z']]
>>> import itertools
>>> list(itertools.product(*l))
[('1', 'a', 'x'), ('1', 'a', 'y'), ('1', 'a', 'z'), ('1', 'b', 'x'),
('1', 'b', 'y'), ('1', 'b', 'z'), ('1', 'c', 'x'), ('1', 'c', 'y'),
('1', 'c', 'z'), ('2', 'a', 'x'), ('2', 'a', 'y'), ('2', 'a', 'z'),
('2', 'b', 'x'), ('2', 'b', 'y'), ('2', 'b', 'z'), ('2', 'c', 'x'),
('2', 'c', 'y'), ('2', 'c', 'z'), ('3', 'a', 'x'), ('3', 'a', 'y'),
('3', 'a', 'z'), ('3', 'b', 'x'), ('3', 'b', 'y'), ('3', 'b', 'z'),
('3', 'c', 'x'), ('3', 'c', 'y'), ('3', 'c', 'z')]
這不是你想要的,但它很容易實現:
>>> for i in range(len(l)):
... print(list(itertools.product(*l[:i+1])))
...
[('1',), ('2',), ('3',)]
[('1', 'a'), ('1', 'b'), ('1', 'c'), ('2', 'a'), ('2', 'b'), ('2', 'c'),
('3', 'a'), ('3', 'b'), ('3', 'c')]
[('1', 'a', 'x'), ('1', 'a', 'y'), ('1', 'a', 'z'), ('1', 'b', 'x'),
('1', 'b', 'y'), ('1', 'b', 'z'), ('1', 'c', 'x'), ('1', 'c', 'y'),
('1', 'c', 'z'), ('2', 'a', 'x'), ('2', 'a', 'y'), ('2', 'a', 'z'),
('2', 'b', 'x'), ('2', 'b', 'y'), ('2', 'b', 'z'), ('2', 'c', 'x'),
('2', 'c', 'y'), ('2', 'c', 'z'), ('3', 'a', 'x'), ('3', 'a', 'y'),
('3', 'a', 'z'), ('3', 'b', 'x'), ('3', 'b', 'y'), ('3', 'b', 'z'),
('3', 'c', 'x'), ('3', 'c', 'y'), ('3', 'c', 'z')]
將所有內容放在一個列表中
>>> result = []
>>> for i in range(len(l)):
... result.extend(list(itertools.product(*l[:i+1])))
...
>>> result
[('1',), ('2',), ('3',), ('1', 'a'), ('1', 'b'), ('1', 'c'), ('2', 'a'),
('2', 'b'), ('2', 'c'), ('3', 'a'), ('3', 'b'), ('3', 'c'), ('1', 'a', 'x'),
('1', 'a', 'y'), ('1', 'a', 'z'), ('1', 'b', 'x'), ('1', 'b', 'y'),
('1', 'b', 'z'), ('1', 'c', 'x'), ('1', 'c', 'y'), ('1', 'c', 'z'),
('2', 'a', 'x'), ('2', 'a', 'y'), ('2', 'a', 'z'), ('2', 'b', 'x'),
('2', 'b', 'y'), ('2', 'b', 'z'), ('2', 'c', 'x'), ('2', 'c', 'y'),
('2', 'c', 'z'), ('3', 'a', 'x'), ('3', 'a', 'y'), ('3', 'a', 'z'),
('3', 'b', 'x'), ('3', 'b', 'y'), ('3', 'b', 'z'), ('3', 'c', 'x'),
('3', 'c', 'y'), ('3', 'c', 'z')]
以您想要的確切形狀獲取它:
>>> sorted(result)
[('1',), ('1', 'a'), ('1', 'a', 'x'), ('1', 'a', 'y'), ('1', 'a', 'z'),
('1', 'b'), ('1', 'b', 'x'), ('1', 'b', 'y'), ('1', 'b', 'z'), ('1', 'c'),
('1', 'c', 'x'), ('1', 'c', 'y'), ('1', 'c', 'z'), ('2',), ('2', 'a'),
('2', 'a', 'x'), ('2', 'a', 'y'), ('2', 'a', 'z'), ('2', 'b'), ('2', 'b', 'x'),
('2', 'b', 'y'), ('2', 'b', 'z'), ('2', 'c'), ('2', 'c', 'x'), ('2', 'c', 'y'),
('2', 'c', 'z'), ('3',), ('3', 'a'), ('3', 'a', 'x'), ('3', 'a', 'y'),
('3', 'a', 'z'), ('3', 'b'), ('3', 'b', 'x'), ('3', 'b', 'y'), ('3', 'b', 'z'),
('3', 'c'), ('3', 'c', 'x'), ('3', 'c', 'y'), ('3', 'c', 'z')]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.