如何从另一个列表创建所有可能值的列表

时间:2021-05-11 20:35:02

标签: python

列表中有四个字母

letters = ['a', 'b', 'c', 'd']

我想用组合中的每个字母创建另一个列表,因此结果如下所示:

['a-b', 'a-c', 'a-d'
'b-a', 'b-c', 'b-d',
'c-a', 'c-b', 'c-d',
'd-a', 'd-b', 'd-c']

怎么做?

5 个答案:

答案 0 :(得分:6)

itertools.permutations 函数正是这样做的

from itertools import permutations

letters = ["a", "b", "c", "d"]

print(["-".join(perm) for perm in permutations(letters, 2)])

如果您不关心排序(所以 a-b 将与 b-a 相同)然后使用 itertools.combinations

答案 1 :(得分:2)

查看permutations

import itertools 

permutations = list(itertools.permutations(['a', 'b', 'c', 'd'], 2))
permutations = [elem[0]+"-"+elem[1] for elem in permutations]

这样实现的效果和下面的一样,大家可能比较熟悉:

permutations = []
for letter_1 in letters:
    for letter_2 in letters:
        if letter_1 != letter_2:
            permutations.append(letter_1 + "-" + letter_2)

答案 2 :(得分:2)

正如其他人所指出的,有一个标准库函数可以从列表中生成所有给定长度的排列:

import itertools
combo = [ '-'.join(pair) for pair in itertools.permutations(letters,2) ]

对于短列表中的配对,基本列表理解选项还不错(但仍然是第二好的):

combo = [ f+'-'+s for fx,f in enumerate(letters) for sx, s in enumerate(letters) if fx!=sx ]

答案 3 :(得分:2)

您希望按照@quamrana 的建议对数组元素进行所有组合,这可以通过 itertools.permutation

完成

该函数将列表和排列的长度作为 输入并返回一个迭代器。

所以你需要打电话

perms = itertools.permutations(['a', 'b', 'c', 'd'], 2)

获取迭代器

现在您可以遍历它并通过

在中间添加破折号
result = [i[0]+"-"+i[1] for i in perms]

答案 4 :(得分:1)

您可能希望使用 itertools.permutations() 函数:

>>> import itertools
>>> res = [f"{i[0]}-{i[1]}" for i in itertools.permutations(letters, 2)]
>>> res
['a-b', 'a-c', 'a-d', 'b-a', 'b-c', 'b-d', 'c-a', 'c-b', 'c-d', 'd-a', 'd-b', 'd-c']
相关问题