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)