开始迭代Python列表的索引

在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] 

遵循“每个元素循环”总是比较好,因为这是正常的事情,但是如果这样做的话,只要记住传统风格也总是被支持的。

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

这是一个旋转生成器,不需要对input序列进行扭曲复制…如果input序列比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开始打印,你可以使用listindex方法来查找“星期一”在列表中的位置,并按照其他post中的说明从那里迭代。 使用list.index可以保存对“Monday”的索引进行硬编码,这是潜在的错误来源:

 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 )