2013-02-12 23 views
23

Ich habe diese Funktion geschrieben, um eine Liste von Tupeln in eine Liste von Listen zu konvertieren. Gibt es eine elegantere/pythonische Art, dies zu tun?Konvertiere eine Liste von Tupeln in eine Liste von Listen

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 

Antwort

34

können Sie list comprehension verwenden:

>>> 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

Ich habe gerade bearbeitet, um einen Link zur Erläuterung der Liste zu ergänzen. –

15

Während die Liste Verständnis eine völlig gültige Antwort ist, wie Sie gerade Art ändern, könnte es sich lohnen, die Alternative bedenkt, the map() built-in:

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

Die integrierte map()-Anwendung wendet einfach auf jedes Element des angegebenen Iterablen ein Callable an. Dies macht es gut für diese spezielle Aufgabe. Im Allgemeinen sind Listenkompromittierungen lesbarer und effizienter (um irgendetwas Komplexes mit map() zu machen, benötigen Sie lambda), aber wo Sie einfach den Typ ändern möchten, kann map() sehr klar und schnell sein.

Beachten Sie, dass ich 2.x hier verwende, damit wir eine Liste bekommen. In 3.x erhalten Sie eine iterable (was faul ist), wenn Sie eine Liste in 3.x wollen, tun Sie einfach list(map(...)). Wenn Sie mit einem iterable für Ihre Zwecke in Ordnung sind, bietet itertools.imap() eine faule map() in 2.x.

+0

Auch in Py2 sind 'map' ohne Lambdas schneller als Listen-Comps. :) –

+1

@BhargavRao Wahrscheinlich um einen vernachlässigbaren Betrag - wenn Sie dies nicht als Leistungsengpass in Ihrem Code identifiziert haben, sollte Lesbarkeit immer die Priorität sein. –

+0

Ich dachte immer, 'map' wäre lesbarer als list-comp. Aber ja, der Geschwindigkeitsunterschied ist ziemlich klein. –

Verwandte Themen