排列Python

时间:2017-12-03 12:02:10

标签: python permutation

如何使用此元组(“A”,“E”,“L”)并生成所有可能的单词而不重复这些字母?结果是3个单词只有一个字母,6个单词有两个字母,6个单词有3个字母。

我试过了:

def gererate(tuplo_letras):
    return [i for i in itertools.permutations(tuplo_letras)]

def final(arg):
    return generate(list(map(''.join, itertools.permutations(arg))))

1 个答案:

答案 0 :(得分:1)

您可以使用itertools.permutations并迭代您要覆盖的排列的所有长度。请注意permutations有两个参数,即所需排列的可迭代和所需长度:

from itertools import permutations, chain

tpl = ("A", "E", "L")
[''.join(p) for p in chain(*(permutations(tpl, l+1) for l in range(len(tpl))))]
# ['A', 'E', 'L', 'AE', 'AL', 'EA', 'EL', 'LA', 'LE', 'AEL', 'ALE', 'EAL', 'ELA', 'LAE', 'LEA']

如果您需要将它们分组,您可以相应地嵌套理解:

[[''.join(p) for p in (permutations(tpl, l+1))] for l in range(len(tpl))]
# [['A', 'E', 'L'], ['AE', 'AL', 'EA', 'EL', 'LA', 'LE'], ['AEL', 'ALE', 'EAL', 'ELA', 'LAE', 'LEA']]