2013-02-12 24 views
23

タプルのリストをリストのリストに変換するこの関数を書いた。これを行うよりエレガントな/ Pythonicの方法がありますか?タプルのリストをリストのリストに変換する

def get_list_of_lists(list_of_tuples): 
    list_of_lists = []               
    for tuple in list_of_tuples: 
     list_of_lists.append(list(tuple)) 

    return list_of_lists 

答えて

34

あなたはlist comprehension使用することができます。

>>> list_of_tuples = [(1, 2), (4, 5)] 
>>> list_of_lists = [list(elem) for elem in list_of_tuples] 

>>> list_of_lists 
[[1, 2], [4, 5]] 
+0

リストの解説を説明するリンクを追加しました。 –

15

をリスト内包が完全に有効な回答ですが、あなただけの種類を変更しているとして、それは別の、the map() built-in検討する価値があるかもしれません:

>>> list_of_tuples = [(1, 2), (4, 5)] 
>>> map(list, list_of_tuples) 
[[1, 2], [4, 5]] 

map()ビルトインは、単に指定可能なイテラブルの各要素に呼び出し可能を適用します。これにより、この特定のタスクには効果的です。一般的に、リスト内包表記は読みやすく効率的です(と複雑なものはlambdaが必要です)。単純にタイプを変更する場合は、map()は非常に明確で迅速です。

ここで2.xを使用しているので、リストを取得しています。 3.xではiterable(怠惰です)を取得します。3.xでリストを作成したい場合は、単にlist(map(...))を実行します。あなたの使用のための繰り返しでうまくいけば、itertools.imap()は2.xで怠け者map()を提供します。

+0

また、Py2 'map'では、Lambdaはリストコンパイルより高速です。 :) –

+1

@BhargavRaoおそらく無視できる量でしょう - これをコードのパフォーマンスのボトルネックと認識していない限り、可読性は常に優先事項です。 –

+0

私はいつも 'map'がlist-compよりも読みやすいと思っていました。しかし、はい、速度差はかなり小さいです。 –

関連する問題