2

おそらく基本的なものですが、他の質問では見つかりませんでした。私は試した:

print ["".join(seq) for seq in itertools.permutations("00011")]

しかし、多くの重複があり、 itertools はすべてのゼロを理解しておらず、すべてのものが同じであるようです...

私は何が欠けていますか?

編集:

おっとっと。Gareth のおかげで、この質問は次の重複であることがわかりました: permutations with unique values。私の質問の言い回しはより明確だと思うので、それを閉じません。

4

2 に答える 2

2
set("".join(seq) for seq in itertools.permutations("00011"))
于 2012-02-17T10:49:23.263 に答える
2
list(itertools.combinations(range(5), 2))

2 つの位置が 5 桁以内に収まる 10 の位置のリストを返します (その他は 0 です)。

[(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 が必要です。

于 2012-02-17T11:05:40.893 に答える