[python] Python 목록 반복을위한 시작 색인

Python에서 목록을 반복 할 때 시작 색인을 설정하는 가장 좋은 방법은 무엇입니까? 예를 들어, 요일 목록 (일요일, 월요일, 화요일 … 토요일)이 있지만 월요일부터 시작하는 목록을 반복하고 싶습니다. 이를 수행하는 가장 좋은 방법은 무엇입니까?



답변

슬라이싱 을 사용할 수 있습니다 .

for item in some_list[2:]:
    # do stuff

이것은 세 번째 요소에서 시작하여 끝까지 반복됩니다.


답변

islice 목록의 일부를 복사 할 필요가 없다는 장점이 있습니다.

from itertools import islice
for day in islice(days, 1, None):
    ...


답변

인덱스 카운터를 사용하여 항상 기존 C 스타일 루핑을 반복 할 수 있습니다.

for i in range(len(l)-1):
    print l[i+1]

항상 “모든 요소에 대한 루프”스타일을 따르는 것이 낫습니다. 왜냐하면 그것이 정상적인 일이기 때문입니다. 그러나 그것이 방해가된다면, 항상 전통적인 스타일도 지원된다는 것을 기억하십시오.


답변

stdlib는 아들을 연결합니다!

deque.rotate():

#!/usr/local/bin/python2.7

from collections import deque

a = deque('Monday Tuesday Wednesday Thursday Friday Saturday Sunday'.split(' '))
a.rotate(3)
deque(['Friday', 'Saturday', 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday'])


답변

당신이 원하는 모든 것이 Monday이후부터 인쇄하는 것이라면 , 당신은 목록에서 “Monday”가있는 위치를 찾기 위해 listindex방법을 사용할 수 있고 다른 포스트에서 설명 된대로 거기에서 반복 할 수 있습니다. 를 사용 list.index하면 잠재적 인 오류 원인 인 “월요일”에 대한 색인을 하드 코딩 할 수 있습니다.

days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
for d in days[days.index('Monday'):] :
   print d


답변

여기에 입력 시퀀스의 뒤틀린 복사본을 만들 필요가없는 회전 생성기가 있습니다. 입력 시퀀스가 ​​7 개 항목보다 훨씬 큰 경우 유용 할 수 있습니다.

>>> def rotated_sequence(seq, start_index):
...     n = len(seq)
...     for i in xrange(n):
...         yield seq[(i + start_index) % n]
...
>>> s = 'su m tu w th f sa'.split()
>>> list(rotated_sequence(s, s.index('m')))
['m', 'tu', 'w', 'th', 'f', 'sa', 'su']
>>>


답변

사람들이 목록 분할 (새 목록에 복사하기 때문에 느림)을 사용하거나 라이브러리 함수를 가져 오거나이를 위해 배열을 회전하려는 이유는 무엇입니까?

range(start, stop, step)(여기서 및는 선택적 인수) start와 함께 일반 for 루프를 사용합니다 step.

예를 들어 인덱스 1에서 시작하는 배열을 반복합니다.

for i in range(1, len(arr)):
    print(arr[i])