2010-01-13 258 views
11

比方说,我有元组的数组,S,在形式:在Python中获取数组中每行的第一个元素?

s = ((1, 23, 34),(2, 34, 44), (3, 444, 234)) 

,我想返回另一个元组,T,每排由第一要素:

t = (1, 2, 3) 

这将是最有效的方法来做到这一点?我当然可以通过s来迭代,但有没有这样做的方式?

回答

22

t = tuple(x[0] for x in s) 
5

通过伊格纳西奥给出的列表解析方法是最干净。

只是踢,你也可以这样做:

zip(*s)[0] 

*s扩展s到的参数列表。因此,它是相当于

zip((1, 23, 34),(2, 34, 44), (3, 444, 234)) 

而且zip返回n元组,每个元组包含来自每个列表中nth项目。

+2

其实,这是一个生成器表达式,而不是一个列表理解。 – 2010-01-13 04:40:28

1
import itertools 
s = ((1, 23, 34),(2, 34, 44), (3, 444, 234)) 
print(next(itertools.izip(*s))) 

itertools.izip返回一个迭代器。 next函数返回迭代器中的下一个(在本例中为first)元素。

在Python 2.x中,zip返回一个元组。 izip使用较少的内存,因为直到需要迭代器不产生它们的内容。

在Python 3 zip返回迭代器。

相关问题