9

Pythonでは、リスト内包表記を使用して3つのリストを連結するにはどうすればよいですか?

もつ:

    list1 = [1,2,3,4]
    list2 = [5,6,7,8]
    list3 = [9,10,11,12]

欲しい:

    allList = [1,2,3,4,5,6,7,8,9,10,11,12]

リスト内包表記を使ってみましたが、まだあまり得意ではありません。これらは私が試したことです:

    allList = [n for n in list1 for n in list2 for n in list3 ]

これは明らかに悪い考えであり、len(list1)*len(list2)*len(list3) 相当の値が得られました。おっとっと。だから私はこれを試しました:

    allList = [n for n in list1, list2, list3]

しかし、それは私に allList = [list1, list 2, list3] (リストの 3 つのリスト) を与えました

+ 演算子 (x = list1 + list2 + list3 のように) を使用して連結できることは知っていますが、単純なリスト内包表記を使用してこれを行うにはどうすればよいでしょうか?

ここにも同様の質問があります: Concatenate 3 lists of wordsですが、それは C# 用です。

4

3 に答える 3

15

より良い解決策はitertools.chain、加算の代わりに使用することです。list1 + list2そうすれば、中間リストを作成してから別の中間リストを作成する代わりに、中間list1 + list2 + list3リストを含まない最終リストを作成するだけです。

allList = [x for x in itertools.chain(list1, list2, list3)]

ただし、このような空のリスト内包表記は非常にばかげています。関数を使用してlist、任意の iterable をリストに変換します。

allList = list(itertools.chain(list1, list2, list3))

または、さらに良いことです...これが必要な唯一の理由がループすることである場合は、イテレータのままにしておきます。

for thing in itertools.chain(list1, list2, list3):
    do_stuff(thing)

私たちがそれに取り組んでいる間、あなたがリンクした「同様の質問」は、実際には非常に異なる、より複雑な質問です. しかし、itertoolsとてもクールなので、Python ではまだワンライナーです。

itertools.product(list1, list2, list3)

または、その質問で指定された形式で印刷したい場合は、次のようにします。

print('\n'.join(map(' '.join, itertools.product(list1, list2, list3))))
于 2013-08-07T21:54:53.513 に答える
0

allList = list1 + list2 + list3代わりに行うことができますallList = [x for x in list1 + list2 + list3]

于 2013-08-07T21:52:28.230 に答える