Python에서 목록을 반복 할 때 시작 색인을 설정하는 가장 좋은 방법은 무엇입니까? 예를 들어, 요일 목록 (일요일, 월요일, 화요일 ... 토요일)이 있지만 월요일부터 시작하는 목록을 반복하고 싶습니다. 이를 수행하는 가장 좋은 방법은 무엇입니까?
Python에서 목록을 반복 할 때 시작 색인을 설정하는 가장 좋은 방법은 무엇입니까? 예를 들어, 요일 목록 (일요일, 월요일, 화요일 ... 토요일)이 있지만 월요일부터 시작하는 목록을 반복하고 싶습니다. 이를 수행하는 가장 좋은 방법은 무엇입니까?
답변:
islice
John La Rooy의 답변에서 제안한대로을 사용해야합니다 .
인덱스 카운터를 사용하여 항상 기존 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']
>>>
월요일 이전에 항목을 잘라내는 대신 월요일부터 시작하도록 목록을 "둘러싸고"효과적으로 회전하려는 경우 :
dayNames = [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday',
'Friday', 'Saturday', ]
startDayName = 'Monday'
startIndex = dayNames.index( startDayName )
print ( startIndex )
rotatedDayNames = dayNames[ startIndex: ] + dayNames [ :startIndex ]
for x in rotatedDayNames:
print ( x )