我正在研究如何生成列表中子值的所有可能组合。
例如,如果我有以下列表:['abc', 'def', 'ghi', 'jkl']
,则我试图生成一个矩阵,其中包含所有可能的值组合,这些值的组合不包括第一个元素的更改,同时还将第一个元素附加到该元素的末尾列表。
所需的输出:
['abc','def','ghi','jkl','abc']
['abc','def','jkl','ghi','abc']
['abc','ghi','def','jkl','abc']
['abc','ghi','jkl','def','abc']
['abc','jkl','ghi','def','abc']
['abc','jkl','def','ghi','abc']
我尝试使用itertools,但是对于该软件包来说我还是一个新手。它似乎适用于列表中的每个字符,但不适用于整个值:
当前代码:
buildings=['abc', 'def', 'ghi', 'jkl']
for t in itertools.product(*buildings):
print(t)
当前输出:
('a', 'd', 'g', 'j')
('a', 'd', 'g', 'k')
('a', 'd', 'g', 'l')
('a', 'd', 'h', 'j')
and so on
答案 0 :(得分:3)
您应使用itertools.permutations
来达到目的:
from itertools import permutations
first, *rest = buildings
for p in permutations(rest):
print([first, *p, first])
这将输出:
['abc', 'def', 'ghi', 'jkl', 'abc']
['abc', 'def', 'jkl', 'ghi', 'abc']
['abc', 'ghi', 'def', 'jkl', 'abc']
['abc', 'ghi', 'jkl', 'def', 'abc']
['abc', 'jkl', 'def', 'ghi', 'abc']
['abc', 'jkl', 'ghi', 'def', 'abc']
答案 1 :(得分:0)
import itertools
tab = ['abc', 'def', 'ghi', 'jkl']
print(list(itertools.permutations(tab,len(tab))))
[('abc', 'def', 'ghi', 'jkl'), ('abc', 'def', 'ghi', 'jkl'), ('abc', 'def', 'ghi', 'jkl'), ('abc', 'def', 'ghi', 'jkl'), ('abc', 'def', 'ghi', 'jkl'), ('abc', 'def', 'ghi', 'jkl'), ('abc', 'def', 'ghi', 'jkl'), ('abc', 'def', 'ghi', 'jkl'), ('abc', 'def', 'ghi', 'jkl'), ('abc', 'def', 'ghi', 'jkl'), ('abc', 'def', 'ghi', 'jkl'), ('abc', 'def', 'ghi', 'jkl'), ('abc', 'def', 'ghi', 'jkl'), ('abc', 'def', 'ghi', 'jkl'), ('abc', 'def', 'ghi', 'jkl'), ('abc', 'def', 'ghi', 'jkl'), ('abc', 'def', 'ghi', 'jkl'), ('abc', 'def', 'ghi', 'jkl'), ('abc', 'def', 'ghi', 'jkl'), ('abc', 'def', 'ghi', 'jkl'), ('abc', 'def', 'ghi', 'jkl'), ('abc', 'def', 'ghi', 'jkl'), ('abc', 'def', 'ghi', 'jkl'), ('abc', 'def', 'ghi', 'jkl')]