列表中子值的所有可能组合

时间:2020-03-31 20:54:44

标签: python

我正在研究如何生成列表中子值的所有可能组合。

例如,如果我有以下列表:['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

2 个答案:

答案 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')]