Каков наилучший способ установки начального индекса при итерации списка в Python. Например, у меня есть список дней недели - воскресенье, понедельник, вторник, суббота, но я хочу перебирать список, начиная с понедельника. Какова наилучшая практика для этого?
Начальный индекс для итерации списка Python
Ответ 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 зацепит вас за сына!
#!/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 )