在Python中迭代列表时,设置起始索引的最佳方法是什么。例如,我有一个星期几的列表-星期日,星期一,星期二,...星期六-但我想从星期一开始遍历该清单。最佳做法是什么?
Answers:
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'])
这是一个旋转生成器,它不需要制作输入序列的扭曲副本...如果输入序列远大于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 )