[英]All possible combinations for 3 digits of list never the same
I have a list that looks like: 我有一个看起来像这样的列表:
A
B
C
D
E
F
G
How do I solve this to find all combinations for 3 digits. 我该如何解决才能找到3位数字的所有组合。 The same letter cannot be used in same row.
同一字母不能在同一行中使用。
ABC
ABD
ABE
ABF
ABG
AGB
Eg something like...: 例如:
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)
This does not give desired input: 这不会提供所需的输入:
[['a'], ['b'], ['c'], ['d'], ['e'], ['a', 'b'], ['a', 'c'], ['a', 'd'], ['a', 'e'], ['b', 'c'], ['b', 'd'], ['b', 'e'], ['c'
The Python Standard Library itertools already has the functionality you are trying to implement. Python标准库itertools已经具有您要实现的功能。 Also you are using it in your code (funnily).
您也可以在代码中使用它(很有趣)。
itertools.combinations(a,3)
returns all 3-combinations of the a. itertools.combinations(a,3)
返回a的所有3个组合。 To convert that to "list of list" you should use .extend()
as follows; 要将其转换为“列表列表”,应使用
.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)
Additionally, I suggest you to search on " Combination, Permutation Difference ".
另外,建议您搜索“ 组合,排列差异 ”。 As I understood from your question;
从您的问题中我了解到; permutation is what you want.
排列就是您想要的。 (If you run the code I shared, you will understand the difference easliy.)
(如果运行我共享的代码,您将容易理解两者之间的区别。)
To understand how the solution process works, try the following: 要了解解决方案的工作原理,请尝试以下操作:
# get all combinations of n items from given list
def getCombinations(items, n):
if len(items) < n: return [] # need more items than are remaining
if n == 0: return [''] # need no more items, return the combination of no items
[fst, *rst] = items
# all combinations including the first item in the list
including = [fst + comb for comb in getCombinations(rst, n-1)]
# all combinations excluding the first item in the list
excluding = getCombinations(rst, n)
both = including + excluding
return both
x = ['a','b','c','d','e']
n = 3
print(getCombinations(x, n))
# ['abc', 'abd', 'abe', 'acd', 'ace', 'ade', 'bcd', 'bce', 'bde', 'cde']
combinations works on strings not lists, so you should first turn it into a string using: ''.join(x)
组合适用于字符串而不是列表,因此应首先使用以下命令将其转换为字符串:
''.join(x)
from itertools import combinations
x = ['a', 'b', 'c', 'd', 'e']
n = 3
aa = combinations(''.join(x), n)
for comb in aa:
print(''.join(comb))
OUTPUT OUTPUT
abc
abd
abe
acd
ace
ade
bcd
bce
bde
cde
Or as a one-liner: 还是单线:
[''.join(comb) for comb in combinations(''.join(x), n)]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.