23

重複の可能性:
リスト内包表記を使用して、タプルのタプルを1次元リストに変換するにはどうすればよいですか?

次のタプルのリストがあるとしましょう。

[(1,2), (1,3), (1,4), (1,5), (1,6)]

私はそれを以下のような単純なリストに変換しようとしています:

[1,2,1,3,1,4,1,5,1,6]

各要素を繰り返し処理して項目を1つずつ別のリストに追加せずに、上記のような単純なリストに変換するにはどうすればよいですか?

タプルの元のリストを実際に反復することなくこれを行うための高速で効率的な方法はありますか、またはこれを行うための組み込み関数/メソッドはありますか?

4

4 に答える 4

37
lst = [(1,2), (1,3), (1,4), (1,5), (1,6)]

import itertools
list(itertools.chain(*lst))
# [1, 2, 1, 3, 1, 4, 1, 5, 1, 6]

または:

[e for l in lst for e in l]
# [1, 2, 1, 3, 1, 4, 1, 5, 1, 6]
于 2012-09-10T16:08:27.373 に答える
12
于 2012-09-10T17:44:36.353 に答える
8

chain.from_iterableリストをゆっくりと進めることで、不要な一括解凍(冗長なメモリ消費につながる)を回避するため、を使用します。

>>> import itertools
>>> L = [(1,2), (1,3), (1,4), (1,5), (1,6)]
>>> list(itertools.chain.from_iterable(L))
[1, 2, 1, 3, 1, 4, 1, 5, 1, 6]
于 2012-09-10T16:22:40.630 に答える
1

itertoolsのような特別なモジュールのパフォーマンスと独立性の観点からそれを行うための最良の方法は次のとおりです。

>>> l = [(1,2), (1,3), (1,4), (1,5), (1,6)] 
>>> reduce(list.__add__,map(list,l))
[1, 2, 1, 3, 1, 4, 1, 5, 1, 6]
于 2012-09-10T16:48:37.927 に答える