可能是基本的,但在任何其他问题中找不到它。 我试过了:
print ["".join(seq) for seq in itertools.permutations("00011")]
但是有很多重复,看起来像itertools不理解所有的零,所有的都是相同的......
我错过了什么?
编辑:
糟糕。感谢Gareth,我发现这个问题是重复的:permutations with unique values。 没关闭它,因为我认为我的问题的措辞更清楚。
答案 0 :(得分:2)
set("".join(seq) for seq in itertools.permutations("00011"))
答案 1 :(得分:2)
list(itertools.combinations(range(5), 2))
返回10个位置的列表,其中两个位置可以在五位数内(其他为零):
[(0, 1),
(0, 2),
(0, 3),
(0, 4),
(1, 2),
(1, 3),
(1, 4),
(2, 3),
(2, 4),
(3, 4)]
对于2个1和13个零的情况,请使用:
list(itertools.combinations(range(5), 2))
返回105个职位的列表。它比原始解决方案快得多。
现在功能:
def combiner(zeros=3, ones=2):
for indices in itertools.combinations(range(zeros+ones), ones):
item = ['0'] * (zeros+ones)
for index in indices:
item[index] = '1'
yield ''.join(item)
print list(combiner(3, 2))
['11000',
'01100',
'01010',
'01001',
'00101',
'00110',
'10001',
'10010',
'00011',
'10100']
这需要14.4μs。
list(combiner(13, 2))
返回105个元素需要134μs。