2012-03-28 141 views
3

我有一个元组列表,我想要一个新的列表,它包含元组的第一个值。给出一个元组列表,返回元组第一个值的新列表

I.e.如果该列表是:

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

我想创建以下列表:

[1,4,100,4]

下面的代码工作:

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

但似乎应该有一个更好的方式,例如:

l = itertools.chain(for i in range(len(a)) a[i][0]) #This won't work 

回答

6

如何列表理解:

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

这会给你

[1, 4, 100, 4] 

的要求:)

7

我通常用一个列表理解:

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

试试这个:

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

如何:

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

'(E对于a)中的e可以简化为a。 – 2012-03-28 18:53:03

+1

你也应该使用'operator.itemgetter(0)'。如果内置的功能执行相同的操作,则无需使用用户定义的功能。 – agf 2012-03-28 19:07:03

3

如果你不想做的列表理解,你可以试试这个:

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

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

结果:

>>> first_vals 
[1, 4, 100, 4] 
相关问题