2010-01-13 5 views
11

의 난의 형태로,이야, 튜플의 배열이 있다고 가정 해 봅시다 :파이썬에서 배열의 첫 번째 요소를 가져오고 싶습니까?

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 반환 각 튜플은 각 목록에서 nth 항목을 포함 n 튜플에 해당합니다.

+2

사실 그것은 생성자 표현식이지 목록 이해력이 아닙니다. –

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

itertools.izip 이터레이터를 반환합니다. next 함수는 이터레이터에서 다음 (이 경우에는 첫 번째) 요소를 반환합니다.

파이썬 2.x에서 zip은 튜플을 반환합니다. izip은 반복자가 필요할 때까지 내용을 생성하지 않으므로 메모리 사용량이 적습니다.

파이썬 3에서 zip은 반복자를 반환합니다.

관련 문제