我有一个列表,看起来像:
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'
Python标准库itertools已经具有您要实现的功能。您也可以在代码中使用它(有趣)。
itertools.combinations(a,3)返回a的所有3个组合。要将其转换为“列表列表”,应使用.extend()以下方法;
itertools.combinations(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)
另外,建议您搜索“ 组合,排列差异 ”。从您的问题中我了解到;排列就是您想要的。(如果运行我共享的代码,您将容易理解两者之间的区别。)