[英]generating all permutations of 2 ones and 3 zeroes with itertools
可能是基本的,但在其他任何問題中都找不到。 我試過了:
print ["".join(seq) for seq in itertools.permutations("00011")]
但是有很多重復,好像itertools不能理解所有的零,並且所有的都是一樣的...
我想念什么?
編輯:
哎呀。 多虧了Gareth,我才發現這個問題是一個重復的問題: 具有唯一值的排列 。 我認為我對這個問題的表述比較清楚,所以沒有關閉它。
set("".join(seq) for seq in itertools.permutations("00011"))
list(itertools.combinations(range(5), 2))
返回十個位置的列表,其中兩個可以在五位數之內(其他均為零):
[(0, 1),
(0, 2),
(0, 3),
(0, 4),
(1, 2),
(1, 3),
(1, 4),
(2, 3),
(2, 4),
(3, 4)]
對於2個1和13個0的情況,請使用以下命令:
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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.