Python에서 목록을 반복 할 때 시작 색인을 설정하는 가장 좋은 방법은 무엇입니까? 예를 들어, 요일 목록 (일요일, 월요일, 화요일 … 토요일)이 있지만 월요일부터 시작하는 목록을 반복하고 싶습니다. 이를 수행하는 가장 좋은 방법은 무엇입니까?
답변
답변
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는 아들을 연결합니다!
#!/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”가있는 위치를 찾기 위해 list
의 index
방법을 사용할 수 있고 다른 포스트에서 설명 된대로 거기에서 반복 할 수 있습니다. 를 사용 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])
