Подтвердить что ты не робот

Начальный индекс для итерации списка Python

Каков наилучший способ установки начального индекса при итерации списка в Python. Например, у меня есть список дней недели - воскресенье, понедельник, вторник, суббота, но я хочу перебирать список, начиная с понедельника. Какова наилучшая практика для этого?

4b9b3361

Ответ 1

Вы можете использовать нарезку:

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

Это будет начинаться с третьего элемента и итерации до конца.

Ответ 2

islice имеет то преимущество, что ему не нужно копировать часть списка

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

Ответ 3

Вы всегда можете с помощью счетчика индексов использовать обычный цикл C:

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

Всегда лучше следовать стилю "loop on every element", потому что это нормальная вещь, но если она мешает вам, просто помните, что традиционный стиль также поддерживается всегда.

Ответ 4

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'])

Ответ 5

Здесь генератор вращения, который не нуждается в извращенной копии входной последовательности... может быть полезен, если входная последовательность намного больше 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']
>>>

Ответ 6

Если вы хотите только напечатать с Monday, вы можете использовать метод list index, чтобы найти позицию, в которой "понедельник" находится в списке, и повторять ее там, как описано в других сообщениях. Использование list.index экономит ваше жесткое кодирование индекса для "Понедельник", что является потенциальным источником ошибки:

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

Ответ 7

Если вы хотите "обернуть" и эффективно повернуть список, чтобы начать с понедельника (а не просто отрубать предметы до понедельника):

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 )