私は3つのリストを持っています:
['1','2']
['a','b','c']
['X','Y']
そして私が得ようとしている結果:
['1aX','1bX','1cX','2aX','2bX','2cX','1aY','1bY','1cY','2aY','2bY','2cY']
これをすばやく設定する方法はありますか?
私は3つのリストを持っています:
['1','2']
['a','b','c']
['X','Y']
そして私が得ようとしている結果:
['1aX','1bX','1cX','2aX','2bX','2cX','1aY','1bY','1cY','2aY','2bY','2cY']
これをすばやく設定する方法はありますか?
あなたが使用することができますitertools.product()
:
map("".join, itertools.product(list1, list2, list3))
>>> x,y,z=['1','2'],['a','b','c'],['x','y']
>>> s=[a+b+c for c in z for a in x for b in y]
>>> s
['1ax', '1bx', '1cx', '2ax', '2bx', '2cx', '1ay', '1by', '1cy', '2ay', '2by', '2cy']
このようにして、必要な順序を選択できます
指定した正確な結果を得るには、次を使用できます。
import operator
import itertools
list1 = ['1','2']
list2 = ['a','b','c']
list3 = ['X','Y']
getter = operator.itemgetter(1, 2, 0)
result = [''.join(getter(seq)) for seq in itertools.product(list3, list1, list2)]
の最後の引数itertools.product()
は最初に変更されるため、出力例に基づいて、最初に中央の要素が進み、次に最初の要素、次に最後になるため、最後、次に 、次に になりlist2
ますlist1
。list3
この呼び出しは、元の要素が最初にoperator.itemgetter()
なるように要素を並べ替えるために使用されます。list1
ここではリスト内包表記の方が読みやすいと思いますが、以下を使用する 1 行の代替案を次に示しますmap()
。
map(''.join, map(operator.itemgetter(1, 2, 0), itertools.product(list3, list1, list2)))
(リスト内包表記を 1 行で行うこともできますが、operator.itemgetter()
反復ごとに呼び出しが実行されるため、そうすべきではありません)