gpt4 book ai didi

python - 为什么python的itertools排列有很多重复的元素?

转载 作者:太空狗 更新时间:2023-10-30 02:11:47 25 4
gpt4 key购买 nike

我试图找到字符串“0000111”的不同排列。所有包含三个 1 和四个 0 的不同字符串。这是我的代码:

p = itertools.permutations("0000111")
l = list(p)
print len(l) #5040
print len(set(l)) #35

怎么了?还有更好的方法吗?

最佳答案

它在手册中:http://docs.python.org/2.7/library/itertools.html#itertools.permutations

Elements are treated as unique based on their position, not on their value. So if the input elements are unique, there will be no repeat values in each permutation.

这意味着 itertools.permutations('000') 会很乐意给你 3! = 6 个结果,其中所有结果均为 '000'

自己看看:http://ideone.com/gzqolT


如果您将问题解释为位图,您的问题就可以解决。 itertools.combinations(S,r)为您提供 Sr 项目的所有子集。在您的示例中 S = range(7)r = 3

A full working solution :

list('{0:07b}'.format(sum(subset))
for subset in itertools.combinations((2**s for s in range(7)), 3))

一点解释:

  • (2**s for s in range(7)) 是 2 到 2^6 的所有幂的生成器。
  • itertools.combinations(…, 3) 找到所有包含 3 个 2 的幂项的子集。
  • sum(subset) 计算例如[1,2,4] = 7。
  • '{0:07b}'.format(…) 将输入 int 格式化为用零填充的二进制数,最大长度为 7。

关于python - 为什么python的itertools排列有很多重复的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20230352/

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