排列列表中的重复项

2024-05-03 07:19:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用itertools库中的permutations函数打印字符串的排列列表。在本例中,它是baca。但是,输出列表中有每个元素的副本。这是:

['aabc', 'aabc', 'aacb', 'aacb', 'abac', 'abac', 'abca', 'abca', 'acab', 'acab', 'acba', 'acba', 'baac', 'baac', 'baca', 'baca', 'bcaa', 'bcaa', 'caab', 'caab', 'caba', 'caba', 'cbaa', 'cbaa']

这是我的密码。这很直截了当。我在代码中没有看到任何会产生这种行为的东西

from itertools import permutations

def rearrangeWord(word):
    p = [''.join(i) for i in permutations(word) ]
    print(sorted(p))

rearrangeWord('baca')

Tags: 列表itertoolsabacpermutationsbacaaabccabaabca
3条回答

如果先对单词进行排序(这要便宜得多),则无需在之后进行排序:

>>> [*dict.fromkeys(map(''.join, permutations(sorted('baca'))))]
['aabc', 'aacb', 'abac', 'abca', 'acab', 'acba', 'baac', 'baca', 'bcaa', 'caab', 'caba', 'cbaa']

multiset_permutations可以找到具有多个项的排列

>>> from sympy.utilities.iterables import multiset_permutations
>>> s = 'baca'


>>> for item in multiset_permutations(s):
    print(item)


['a', 'a', 'b', 'c']
['a', 'a', 'c', 'b']
['a', 'b', 'a', 'c']
['a', 'b', 'c', 'a']
['a', 'c', 'a', 'b']
['a', 'c', 'b', 'a']
['b', 'a', 'a', 'c']
['b', 'a', 'c', 'a']
['b', 'c', 'a', 'a']
['c', 'a', 'a', 'b']
['c', 'a', 'b', 'a']
['c', 'b', 'a', 'a']

您正在复制所有“aa”排列

print(sorted(set(p)))

相关问题 更多 >