列表中有四个字母
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']
怎么做?
答案 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']