正常的排列是:
'ABC'
↓
'ACB'
'BAC'
'BCA'
'CAB'
'CBA'
但是,如果我想这样做怎么办:
'ABC'
↓
'AA'
'AB'
'AC'
'BA'
'BB'
'BC'
'CA'
'CB'
'CC'
这叫什么?对于具有数百个元素的数组来说,它的效率如何?
最佳答案
您的术语有点令人困惑:您所拥有的不是字符的排列,而是每个可能的字符与每个可能的字符的配对:笛卡尔积。
您可以使用itertools.product
来生成这些组合,但请注意,这会返回一个迭代器而不是一个容器。因此,如果您需要列表中的所有组合,则需要显式构造一个列表
:
from itertools import product
mystr = 'ABC'
prodlen = 2
products = list(product(mystr,repeat=prodlen))
或者,如果您只循环这些值:
for char1,char2 in product(mystr,repeat=prodlen):
# do something with your characters
...
或者,如果您想生成 2 长度的字符串,您可以在列表理解中执行此操作:
allpairs = [''.join(pairs) for pairs in products]
# ['AA', 'AB', 'AC', 'BA', 'BB', 'BC', 'CA', 'CB', 'CC']
关于python - 如何在 Python3 中使用不同种类的排列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41233619/