2009-08-15 2 views
8

루프에 .. 파이썬에의 오프셋 (offset)를 가지는 요소를 액세스, 나는 오히려내가 파이썬 약간의 주위에 일 처리 봤는데

for x in SomeArray: 

를 사용하는 ('파이썬'또는) 그것은 일반적으로 더 나은 것을 수집 한 더 C 스타일

for i in range(0, len(SomeArray)): 

보다 나는이의 장점, 주로 청소기 코드 및 좋은 map() 및 관련 기능을 사용할 수있는 기능을 참조 할. 그러나 배열에서 다양한 오프셋의 요소에 동시에 액세스하려는 상황에 자주 직면합니다. 예를 들어, 요소 뒤에 두 단계 뒤에 현재 요소를 추가 할 수 있습니다. 명시적인 색인에 의존하지 않고이를 수행 할 수있는 방법이 있습니까?

+1

범위 (0, len (SomeArray))는 일반적인 범위 (len (SomeArray))와 같습니다. – EOL

답변

14

파이썬에서이를 수행하는 방법은 :

for i, x in enumerate(SomeArray): 
    print i, x 

enumerate 발생기 2- 튜플 배열 인덱스 및 소자를 포함하는 각각의 시퀀스를 생성한다.

+0

그러나 루프의 한 반복에서 이전/후속 요소에 어떻게 액세스합니까? – int3

+0

루프 내에서 SomeArray [i-1] 또는 SomeArray [i + 1]에 액세스 할 수 있습니다. –

+0

'SomeArray [i-1]'? 그러나 당신은 실제로 당신이 무엇을하고 있는지 설명하기를 원할 것입니다 – SilentGhost

6

목록 색인 생성 및 zip()은 친구입니다. 나는 뒤에 요소에 두 단계를 현재의 요소를 추가 할 수 있습니다

:

은 여기보다 구체적인 질문에 대한 내 대답이다. 명시적인 색인에 의존하지 않고이를 수행 할 수있는 방법이 있습니까? 당신이 숫자 배열 작업을하려는 경우

arr = range(10) 
[i+j for i,j in zip(arr[:-2], arr[2:])] 

또한 모듈 numpy를 사용할 수 있습니다.

import numpy 
narr = numpy.arange(10) 
narr[:-2] + narr[2:] 

n 번째 제 (N-2) 번째의 요소에 대한 요소 (m + 2) 요소에 m 번째 원소를 첨가 동등 (위한 추가 : 예를 들어, 상기 코드들은보다 매끄럽게 쓸 수 수학적으로 기울이면, n -> m + 2의 대입을 수행했다. n의 범위는 [2, len (arr)]이고 m의 범위는 [0, len (arr) -2]입니다. 대괄호와 괄호에 유의하십시오. 2에서 len (arr) -1까지의 요소 (처음 두 요소는 제외)는 0에서 len (arr) -3까지의 요소 (마지막 두 요소는 제외)는 [: -2]로 색인화됩니다. 2 :].

귀하는 이미 목록 이해를 알고 있다고 가정합니다.

+0

옙 나는 목록의 내포를 알고있다. 그래도 실제로 사용하지 않았습니다. zip()은 또 다른 멋진 솔루션처럼 보입니다. 감사합니다! – int3