gpt4 book ai didi

python - 哪个代码删除了排列中的重复组合

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:55:08 24 4
gpt4 key购买 nike

我没有发现下面两个函数的明显区别。所以问题是,第二个函数如何比较和删除重复字符。

非重复字符的排列

def perms(s):        
if(len(s)==1): return [s]
result=[]
for i,v in enumerate(s):
result += [v+p for p in perms(s[:i]+s[i+1:])]
return result
perms('abc')
['abc', 'acb', 'bac', 'bca', 'cab', 'cba']

重复字符的排列

def permutations(string):
result = set([string])
if len(string) == 2:
result.add(string[1] + string[0])
elif len(string) > 2:
for i, c in enumerate(string):
for s in permutations(string[:i] + string[i + 1:]):
result.add(c + s)
return list(result)
permutations('aabb');
['aabb', 'abab', 'abba', 'baab', 'baba', 'bbaa']

编辑:

当输入包含重复项时,该函数返回不同的结果:

>>> permutations('aabb')
['abab', 'baba', 'bbaa', 'abba', 'aabb', 'baab']
>>> perms('aabb')
['aabb', 'aabb', 'abab', 'abba', 'abab', 'abba', 'aabb', 'aabb', 'abab',
'abba', 'abab', 'abba', 'baab', 'baba', 'baab', 'baba', 'bbaa', 'bbaa',
'baab', 'baba', 'baab', 'baba', 'bbaa', 'bbaa']

最佳答案

区别很简单。第二个函数将结果存储在一个集合中:

result = set([string])

集合从不包含重复项。如果您向集合中添加重复值,则会发生注释:

>>> set([1, 2, 3, 2, 3, 2, 1])
set([1, 2, 3])

最后,该函数从集合创建一个列表,因此集合从外部不可见:

return list(result)

关于python - 哪个代码删除了排列中的重复组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39424739/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com