Ответ 1
Вы можете использовать нарезку:
for item in list[2:]:
# do stuff
Это будет начинаться с третьего элемента и итерации до конца.
Каков наилучший способ установки начального индекса при итерации списка в Python. Например, у меня есть список дней недели - воскресенье, понедельник, вторник, суббота, но я хочу перебирать список, начиная с понедельника. Какова наилучшая практика для этого?
Вы можете использовать нарезку:
for item in 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]
Всегда лучше следовать стилю "loop on every element", потому что это нормальная вещь, но если она мешает вам, просто помните, что традиционный стиль также поддерживается всегда.
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'])
Здесь генератор вращения, который не нуждается в извращенной копии входной последовательности... может быть полезен, если входная последовательность намного больше 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']
>>>
Если вы хотите только напечатать с Monday
, вы можете использовать метод list
index
, чтобы найти позицию, в которой "понедельник" находится в списке, и повторять ее там, как описано в других сообщениях. Использование list.index
экономит ваше жесткое кодирование индекса для "Понедельник", что является потенциальным источником ошибки:
days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
for d in days[days.index('Monday'):] :
print d
Если вы хотите "обернуть" и эффективно повернуть список, чтобы начать с понедельника (а не просто отрубать предметы до понедельника):
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 )