2016-03-01 6 views
7

Gibt es in Python eine Möglichkeit, mehrere Listen aus einem Verständnis zurückzugeben?Mehrere Listen aus dem Verständnis in Python zurückgeben

Ich möchte von etwas in der Art tun:

x,y = [i,(-1*j) for (i,j) in enumerate(range(10))] 
# x = [0 .. 9] 
# y = [0 .. -9] 

, die ein stummes Beispiel ist, aber ich frage mich nur, wenn es möglich ist.

+0

Wahrscheinlich, aber ich kann nicht denke an einen praktischen Grund, warum du es möchtest. – IanAuld

+1

@IanAuld Kannst du keinen praktischen Grund sehen, dein X und Y zu trennen? (vielleicht für das Plotten in bestimmten Bibliotheken?) –

+0

Es wäre wahrscheinlich besser lesbar und wartbarer, es separat zu machen. Es ist nicht nötig, alles auf einer Linie zu halten. – IanAuld

Antwort

2
x,y =zip(* [(i,(-1*j)) for (i,j) in enumerate(range(10))]) 

Sie entpacken Sie einfach die Liste

xy = [(1,2),(3,4),(5,6)] 
x,y = zip(*xy) 
# x = (1,3,5) 
# y = (2,4,6) 
+2

Die Rückgabetypen von beiden sind Tupel nicht Listen – IanAuld

+1

es wird Tupel, keine Listen geben, aber es ist die richtige Idee – wim

+1

Sort of. Ein großer Unterschied ist veränderlich! = Unveränderlich. – IanAuld

1

Sie die Liste Verständnis überspringen können:

>>> x,y=range(0,10), range(0,-10,-1) 
>>> x 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> y 
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9] 

Oder Sie tun können:

>>> x,y=map(list, zip(*[(e,-e) for e in range(10)])) 
+0

Hinweis: 'range' gibt nur' liste' auf Py2 zurück; in Py3 ist es ein spezielles 'range'-Objekt, das in den' list'-Konstruktor eingebunden werden müsste, um eine tatsächliche, veränderbare 'liste' zu ​​erstellen. Aber wenn das Problem so einfach wie gegeben ist, vermeiden Sie am besten die Komplexität der Erzeugung gepaarter Werte und deren Entkopplung, wenn es einfacher ist, ungepaarte Werte direkt zu generieren. Und wenn Veränderlichkeit nicht benötigt wird, wäre die Verwendung der rohen Py3-'range' oft besser als eine veränderbare' liste' (Py2 'xrange' ist nicht ganz so gut wie eine Drop-in-Ersetzung, selbst wenn Sie keine Veränderbarkeit benötigen). – ShadowRanger