在Python中迭代列表时设置起始索引的最佳方法是什么。例如,我有一个星期几的列表 - 星期日,星期一,星期二,......星期六 - 但我想从星期一开始迭代列表。这样做的最佳做法是什么?
答案 0 :(得分:133)
答案 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)
#!/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循环(其中start
和step
是可选参数)。
例如,遍历从索引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 )