Program Tip

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

programtip 2020. 11. 6. 19:03
반응형

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"가있는 위치를 찾고 다른 게시물에서 설명한대로 거기에서 반복 할 수 있습니다. 를 사용 하면 잠재적 인 오류 원인 인 "월요일"에 대한 색인을 하드 코딩 할 수 있습니다.listindexlist.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 )

참고 URL : https://stackoverflow.com/questions/6148619/start-index-for-iterating-python-list

반응형