Mos*_*aly 4 python permutation python-itertools
我试图找到字符串"0000111"的不同排列.所有不同的字符串包含三个1和4个0.这是我的代码:
p = itertools.permutations("0000111")
l = list(p)
print len(l) #5040
print len(set(l)) #35
Run Code Online (Sandbox Code Playgroud)
怎么了?还有更好的方法吗?
它在手册中:http://docs.python.org/2.7/library/itertools.html#itertools.permutations
元素根据其位置而不是其价值被视为唯一元素.因此,如果输入元素是唯一的,则每个排列中都不会有重复值.
这意味着itertools.permutations('000')将很高兴地给你3!= 6个结果,全部都是'000'.
如果您将问题解释为位图,则可以解决您的问题.itertools.combinations(S,r)给你的所有子集S与r项目.在你的例子S = range(7)和r = 3.
list('{0:07b}'.format(sum(subset))
for subset in itertools.combinations((2**s for s in range(7)), 3))
Run Code Online (Sandbox Code Playgroud)
一点点解释:
(2**s for s in range(7)) 是2到2 ^ 6的所有幂的发电机.itertools.combinations(…, 3) 查找具有3项这些2的幂的所有子集.sum(subset)计算eg [1,2,4]= 7 的总和.'{0:07b}'.format(…) 将输入int格式化为二进制数,用零填充,长度为7.