小编典典

列表的3位数字的所有可能组合永远都不相同

algorithm

我有一个列表,看起来像:

A
B
C
D
E
F
G

我该如何解决才能找到3位数字的所有组合。不能在同一行中使用相同的字母。

ABC
ABD
ABE
ABF
ABG
AGB

例如:

x = ['a','b','c','d','e']
n = 3
import itertools
aa = [list(comb) for i in range(1, n+2) for comb in itertools.combinations(x, i)]
print(aa)

这不会提供所需的输入:

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

阅读 324

收藏
2020-07-28

共1个答案

小编典典

Python标准库itertools已经具有您要实现的功能。您也可以在代码中使用它(有趣)。

itertools.combinations(a,3)返回a的所有3个组合。要将其转换为“列表列表”,应使用.extend()以下方法;

x = ['a','b','c','d','e']
n = 3
import itertools
permutations = []
combinations = []
combinations.extend(itertools.combinations(x,n))
permutations.extend(itertools.permutations(x,n))

print("Permutations;", permutations)
print("\n")
print("Combinations;", combinations)

另外,建议您搜索“ 组合,排列差异 ”。从您的问题中我了解到;排列就是您想要的。(如果运行我共享的代码,您将容易理解两者之间的区别。)

2020-07-28