質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
リストボックス

ユーザーがリストから1つ以上のアイテムを選択できるようにするGUI要素です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1120閲覧

リスト要素を並び替えてできる全ての組み合わせの作り方

J_RICE

総合スコア2

リストボックス

ユーザーがリストから1つ以上のアイテムを選択できるようにするGUI要素です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2021/07/13 03:44

実現したいこと

Python初心者です.リストの組み合わせの作成について質問させていただきます.

xk = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1]

リストxkの要素を並び替え,1と0の並べ方の全ての組み合わせを示すリストcombinationを作りたいと考えています.

現在の方法

import itertools as irq

xk = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1]

permutations = list(ir.permutations(xk))

combination = list(set(permutations))

この場合,1度,0や1を区別せず,順列を求めるので,数が膨大になってしまうため,メモリ不足となってしまいます.

###質問
上記リストxkを並び替えてできる792の要素を持つリストcombination
combination= [[0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1], [1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1],・・・]

の作成過程についてご教示いただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

itertools.combinationsとnumpyを使うとこういう感じです。

lengthとzerosを変更して使ってください。

python

1>>> import itertools 2>>> import numpy as np 3>>> 4>>> length = 6 5>>> zeros = 3 6>>> ones = np.ones(length, dtype=int) 7>>> 8>>> for c in itertools.combinations(list(range(length)), zeros): 9... result = ones.copy() 10... np.subtract.at(result,list(c), 1) 11... print(result) 12... 13[0 0 0 1 1 1] 14[0 0 1 0 1 1] 15[0 0 1 1 0 1] 16[0 0 1 1 1 0] 17[0 1 0 0 1 1] 18[0 1 0 1 0 1] 19[0 1 0 1 1 0] 20[0 1 1 0 0 1] 21[0 1 1 0 1 0] 22[0 1 1 1 0 0] 23[1 0 0 0 1 1] 24[1 0 0 1 0 1] 25[1 0 0 1 1 0] 26[1 0 1 0 0 1] 27[1 0 1 0 1 0] 28[1 0 1 1 0 0] 29[1 1 0 0 0 1] 30[1 1 0 0 1 0] 31[1 1 0 1 0 0] 32[1 1 1 0 0 0]

投稿2021/07/13 04:12

ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

J_RICE

2021/07/13 08:41

早速の回答,ありがとうございました。
guest

0

Python

1a = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1] 2 3def gen(n0, n1, i): # n0: 0 の個数, n1: 1 の個数 4 if n0 == 0 and n1 == 0: 5 print(a) 6 return 7 if n0 > 0: 8 a[i] = 0 9 gen(n0-1, n1, i+1) 10 if n1 > 0: 11 a[i] = 1 12 gen(n0, n1-1, i+1) 13 14gen(5, 7, 0)

追記
リストcombination を作りたいのですね。

Python

1xk = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1] 2 3combination = [] 4a = xk[:] 5 6def gen(n0, n1, i): # n0: 0 の個数, n1: 1 の個数 7 if n0 == 0 and n1 == 0: 8 combination.append(a[:]) 9 return 10 if n0 > 0: 11 a[i] = 0 12 gen(n0-1, n1, i+1) 13 if n1 > 0: 14 a[i] = 1 15 gen(n0, n1-1, i+1) 16 17gen(5, 7, 0) 18for e in combination: 19 print(e)

投稿2021/07/13 11:05

編集2021/07/13 11:12
kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

J_RICE

2021/07/14 04:17

ご丁寧に返信いただき,ありがとうございます.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問