启动迭代Python列表的索引

时间:2011-05-27 06:28:57

标签: python iteration

在Python中迭代列表时设置起始索引的最佳方法是什么。例如,我有一个星期几的列表 - 星期日,星期一,星期二,......星期六 - 但我想从星期一开始迭代列表。这样做的最佳做法是什么?

8 个答案:

答案 0 :(得分:133)

您可以使用slicing

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

这将从第三个元素开始并迭代到结尾。

答案 1 :(得分:30)

islice的优势在于它不需要复制部分列表

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

答案 2 :(得分:11)

您始终可以使用传统C样式循环的索引计数器循环:

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

最好遵循“循环每个元素”的风格,因为这是正常的事情,但是如果它妨碍了你,请记住传统的风格也一直受到支持。

答案 3 :(得分:7)

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

答案 4 :(得分:3)

这是一个旋转生成器,它不需要制作输入序列的扭曲副本......如果输入序列远大于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']
>>>

答案 5 :(得分:2)

如果你想要的是从Monday开始打印,你可以使用list的{​​{1}}方法找到“星期一”在列表中的位置,并从中迭代在其他帖子中解释。使用index可以节省您对“星期一”的索引进行硬编码,这是一个潜在的错误来源:

list.index

答案 6 :(得分:1)

为什么人们使用列表切片(速度很慢,因为它会复制到新列表),导入库函数或为此尝试旋转数组?

range(start, stop, step)使用正常的for循环(其中startstep是可选参数)。

例如,遍历从索引1开始的数组:

for i in range(1, len(arr)):
    print(arr[i])

答案 7 :(得分:0)

如果你想“环绕”并有效地将列表旋转到星期一开始(而不是仅仅在周一之前砍掉项目):

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 )