[過去ログ] くだすれPython(超初心者用) その44【Ruby禁止】 (1002レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
119
(1): デフォルトの名無しさん [] 2019/08/04(日) 13:35:01.70 ID:kKKVz9aw(1/2) AAS
>>117
117(2): デフォルトの名無しさん [sage] 2019/08/02(金) 23:38:19.91 ID:z2PJQeJ8(1) AAS
組み合わせの問題で、10個の要素を2個ずつに分ける組み合わせは
itertools,combinations(range(10), 2)
で出力できますが、10個の要素を1,2,2,5個に分ける組み合わせ
というように均等ではない個数に分ける場合、どうやればいいでしょうか?

ここでし知りたいのは組み合わせ数ではなく実際の組み合わせのパターンです
10個の要素を1,2,2,5個に分ける組み合わせ数だけでしたら
C[10,1]*C[9,2]*C[7,2]*C[5,5] で求まるのはわかりますが、itertools,combinations
のようにその実際の組み合わせパターンを出力させたいのです

よろしくお願いします
再帰なのであまりにも多い要素の組み合わせは出せないけど、これでどうでしょ

from itertools import combinations

def my_combinations(iterable, rs, tmp=None):
r, *rs2 = rs
for t in combinations(iterable, r):
tmp2 = [] if tmp is None else list(tmp[:])
tmp2.append(t)
tmp2 = tuple(tmp2)
if rs2:
lis2 = list(iterable)[:]
for i in t:
lis2.remove(i)
for r in my_combinations(lis2, rs2, tmp2):
yield r
else:
yield tmp2

if __name__ == '__main__':
for t in my_combinations(range(10), (1, 2, 2, 5)):
print(t)
120: 119 [] 2019/08/04(日) 14:00:35.50 ID:kKKVz9aw(2/2) AAS
>>117
1読んでなかった。こちらに貼りました
外部リンク:ideone.com
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.037s