在Python中迭代列表时设置起始索引的最佳方法是什么.例如,我有一个星期几的列表 - 星期日,星期一,星期二,......星期六 - 但我想从星期一开始迭代列表.这样做的最佳做法是什么?
Bjö*_*lex 150
你可以使用切片:
for item in some_list[2:]:
# do stuff
Run Code Online (Sandbox Code Playgroud)
这将从第三个元素开始并迭代到结尾.
Joh*_*ooy 35
islice 的优点是它不需要复制部分列表
from itertools import islice
for day in islice(days, 1, None):
...
Run Code Online (Sandbox Code Playgroud)
Cha*_* Su 25
为什么人们使用列表切片(很慢,因为它复制到新列表)、导入库函数或尝试为此旋转数组?
使用普通的 for 循环 with range(start, stop, step)(其中start和step是可选参数)。
例如,循环遍历从索引 1 开始的数组:
for i in range(1, len(arr)):
print(arr[i])
Run Code Online (Sandbox Code Playgroud)
Lak*_*sad 12
您始终可以使用传统C样式循环的索引计数器循环:
for i in range(len(l)-1):
print l[i+1]
Run Code Online (Sandbox Code Playgroud)
遵循"循环每个元素"的风格总是更好,因为这是正常的事情,但如果它妨碍你,只要记住常规风格也是支持的.
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'])
Run Code Online (Sandbox Code Playgroud)
如果您只想从头开始打印Monday,您可以使用list的index方法来查找“Monday”在列表中的位置,然后按照其他帖子中的说明从那里进行迭代。使用list.index可以节省您对“星期一”索引的硬编码,这是潜在的错误来源:
days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
for d in days[days.index('Monday'):] :
print d
Run Code Online (Sandbox Code Playgroud)
这是一个旋转生成器,不需要制作输入序列的扭曲副本……如果输入序列远大于 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']
>>>
Run Code Online (Sandbox Code Playgroud)