ネストされたリストを欲しい形に変換

List transformation in python – StackOverflow

a = [
    ['AB'],
    ['CD', 'DE'],
    ['FG']
]
for e in itertools.product(*a):
    print(e)

(‘AB’, ‘CD’, ‘FG’)
(‘AB’, ‘DE’, ‘FG’)

とみるよりも,親リストの中に子リストがあって,子リストをバラしたいだけな訳だから,
直積なんて考えなくても,子リストの長さだけ知れば良い.

a = ['AB', ['CD', 'DE'], 'FG']
for x in a:
    if isinstance(x, list):
        len_chld = len(x)
len_chld

2

子リストをバラして親リストの要素と合わせたいので,
子リストの長さだけ回してあげれば良い.

[[x[i] if isinstance(x, list) else x for x in a] for i in range(len_chld)]

[[‘AB’, ‘CD’, ‘FG’], [‘AB’, ‘DE’, ‘FG’]]

こういうのはまさに直積を求めるケースだけど.

Get the cartesian product of a series of lists? – StackOverflow

import itertools

somelists = [
   [1, 2, 3],
   ['a', 'b'],
   [4, 5]
]

for element in itertools.product(*somelists):
    print(element)

(1, ‘a’, 4)
(1, ‘a’, 5)
(1, ‘b’, 4)
(1, ‘b’, 5)
(2, ‘a’, 4)
(2, ‘a’, 5)
(2, ‘b’, 4)
(2, ‘b’, 5)
(3, ‘a’, 4)
(3, ‘a’, 5)
(3, ‘b’, 4)
(3, ‘b’, 5)

カテゴリー: 未分類 パーマリンク