2016-05-05 8 views
0
def f1(x): return [(x+1)*2-1, (x+1)*2-1] 
def f2(x): return [(x+1)*2, (x+1)*2] 

[[f1(i), f2(i)] for i in np.arange(3)] 

der Code Dies ist ein list von 3 Listenpaare Elemente zu erzeugen:eine Python-Liste erstellen mit mehreren Elementen pro Iteration

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

Allerdings würde ich eine list wie unten erhalten möchten, mit eine Zeile for Schleife.

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

Dies ist, wie es mit mehreren Linien funktioniert:

n = [] 
for i in np.arange(3): 
    n += [f1(i), f2(i)] 

Es ist wie pro Zeit 2 Elemente zusammenzusetzen versuchen, wo ich weiß nicht, wie += von Code für eine Zeile zu erreichen . Wie kann ich das machen?

Antwort

1
[x for i in np.arange(3) for x in [f1(i), f2(i)]] 

Verwenden Sie ein Listenverständnis mit zwei for Klauseln.

+0

Vielen Dank! Ich denke, das ist weit, eine Zeile Code kann gehen. Aber auch [x für x in [f1 (i), f2 (i)] für i in np.arange (3)] funktioniert. Das heißt, die 'for'-Reihenfolge ist optional? –

+0

Die Schleifenreihenfolge ist wichtig. Was du geschrieben hast, macht etwas völlig anderes und wahrscheinlich nicht das, was du willst. – user2357112

+0

Vielen Dank! –

0

ich so etwas tun könnte:

[f1(i) for i in np.arange(3)] + [f2(i) for i in np.arange(3)] 

Aber gibt es einen besseren Weg?

Verwandte Themen