2012-03-28 10 views
3

Ich habe eine Liste von Tupeln und ich möchte eine neue Liste, bestehend aus den ersten Werten der Tupel.Gegeben eine Liste von Tupeln, eine neue Liste der ersten Werte der Tupel zurückgeben

I.e. wenn die Liste:

[(1,5), (4,10), (100,3), (4,8)]

ich die folgende Liste erstellen möchten:

[1,4,100,4]

Der folgende Code funktioniert:

a = [(1,5),(4,10),(100,3),(4,8)] 
l = [] 
for i in range(len(a)): 
    l.append(a[i][0]) 

Aber es scheint, sollte es eine bessere Art und Weise, zum Beispiel sein:

Antwort

6

Wie über eine Liste Verständnis:

l=[(1,5),(4,10),(100,3),(4,8)] 
print [x[0] for x in l] 

Dies wird Ihnen

[1, 4, 100, 4] 

wie gewünscht :)

7

Ich würde in der Regel eine Liste Verständnis verwenden:

>>> a = [(1,5),(4,10),(100,3),(4,8)] 
>>> [x for x, y in a] 
[1, 4, 100, 4] 
2

Versuchen Sie dies:

>>> a = [(1,5),(4,10),(100,3),(4,8)] 
>>> [b[0] for b in a] 
[1, 4, 100, 4] 
1

Wie wäre:

>>> map(lambda e: e[0], (e for e in a)) 
[1, 4, 100, 4] 
+5

'(e für e in a) kann "zu" vereinfacht werden. –

+1

Auch sollten Sie 'operator.itemgetter (0)' verwenden. Keine Notwendigkeit, eine benutzerdefinierte Funktion zu verwenden, wenn es eine eingebaute Funktion gibt, die dasselbe tut. – agf

3

Wenn Sie keine Liste Verständnis tun möchten, können Sie diese versuchen:

x = [(1,5),(4,10),(100,3),(4,8)] 

first_vals = list(zip(*x)[0]) 

Ergebnis:

>>> first_vals 
[1, 4, 100, 4]