pythonを用いて、
組み合わせの一覧を表示するプログラムを
作りたいと考えております。
例えば、
python
1a=[1, 2, 3] 2b=[5, 6]
という2つの配列に対して、
python
1[[1, 5], [1, 6], [2, 5], [2, 6], [3, 5], [3, 6]]
のような結果を返すものです。
この例のように、
予め、配列の個数がわかっていれば、
for文を用いて
python
1data = [] 2for i in a: 3 for j in b: 4 data.append([i, j])
とするか、
もしくはitertoolsを使って、
python
1data = list(itertools.product(a, b))
とすることができます。
しかし、今回厄介なのが、
この配列の個数が状況によって変わる
(データをファイルから読み込むようなものを考えているので、
読み込むファイルで変わる)
というこであり、
場合によっては、
python
1a=[1, 2, 3] 2b=[5, 6] 3c=[9, 8, 7, 6, 5]
であったり
python
1a=[1, 2, 3] 2b=[5, 6] 3c=[9, 8, 7, 6, 5] 4d=[11, 12] 5e=[1, 2, 3, 4, 5]
だったりするわけです。
実際これらの配列は、
辞書に格納しようと考えており、
python
1dic={'a':[1, 2, 3], 'b':[5, 6]}
このような状態から
python
1[[1, 5], [1, 6], [2, 5], [2, 6], [3, 5], [3, 6]]
を得たいと考えております。
始めは、単に入れ子構造にすれば良いと考え、
python
1dic={'a':[1, 2, 3], 2 'b':[5, 6], 3 'c':[9, 8, 7, 6, 5], 4 'd':[11, 12]} 5dick=dic.keys() 6data = itertools.product(dic[dick[0]], dic[dick[1]]) 7for dk in range(len(dick)-2): 8 data = itertools.product(data, dic[dick[dk+2]])
のようにしようと考えました。
しかし、この場合、
次のようになってしまいます。
python
1[(((1, 9), 5), 11), 2 (((1, 9), 5), 12), 3 (((1, 9), 6), 11), 4 ...
一方イメージしているのは
次のような感じです。
python
1[(1, 9, 5, 11), 2 (1, 9, 5, 12), 3 (1, 9, 6, 11), 4...
以上長くなってしまいましたが、
みなさんのお力をお借りしたいです。
どうかよろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/31 10:29