2010-01-13 194 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返回迭代器。

相關問題