2010-12-15 4 views
6

그래서 array[:-1]을 호출하면 배열을 복제 할 것입니다.Python loop to [: -1]

3000 개의 요소가있는 큰 배열이 있다고 가정 해 봅시다. 내가 반복 할 때 복제하지 않기를 바란다! 난 그냥 마지막 두 번째로 반복하고 싶다.

for item in array[ :-1 ] : 
    # do something with the item 

그래서, 나는 카운터 변수에 의존해야

for c in range(0, len(array) - 1) : 
    # do something with array[ c ] 

을하거나 만드는 방법이/array[:-1] 구문은 효율적입니다?

+1

가능 중복 된 [I 파이썬 목록에 "보기"를 만들 수 있습니까?] (http://stackoverflow.com/questions/3485475/can-i-create-a-view-on-a-python-list) –

+2

슬프게도, "다른 질문"은 완전히 itertools에서 빠져 나온다. 따라서 나는이 질문을 끝내기 위해 투표하지 않았다. –

+0

@pst는 다른 질문에 대해 더 나은 답변을 올리려면 "할 일이 옳지 않습니까? –

답변

6
for item in itertools.islice(array, len(array) - 1): 
4

체크 아웃 itertools.islice하고 싶은 일을 할 것 같습니다 :

from itertools import islice 
for item in islice(array, 0, len(array) - 1): 
    # do something with item 

이 약이다 네가 원하는 것의 절반; array[i]을 말할 필요는 없지만 len(array) - 1을 지정할 필요는 없습니다.

3000 개 항목은 최신 컴퓨터에는 아무런 의미가 없습니다. 프로그램이 눈에 띄게 느리고 코드의 일부가 기여 요인임을 결정하기 위해 프로파일 링하지 않는 한 비효율에 대해 걱정하지 않아도됩니다. 당신이 원하지 않는 경우를 들어

2

// 시퀀스의 길이를 모를 수 없습니다

def allbutlast(seq): 
    it = iter(seq) 
    el = next(it) 
    for e in it: 
    yield el 
    el = e 

for i in allbutlast([1, 2, 3]): 
    print i