我有一个清单。我想从中处理列表中的项目variable starting point
。
lines = ["line 0", ..., "line 25", ...]
cursor = 25
for i, line in enumerate(lines, start=cursor):
print("cursor is at:", cursor)
print("start line is:", lines[cursor])
print("actual line is:", line)
输出:
cursor is at: 25
start line is: line 25
actual line is: line 0
...
我希望enumerate
从cursor
这里开始,但是它从开始0
。
我敢肯定我误解了一些东西,但是我真的很想了解如何enumerate
改进我的Python。
尝试了解以下简单示例:
lines = ['line 0', 'line 1', 'line 2']
cursor = 4
for idx, line in enumerate(lines, cursor):
print(idx, '->', line)
输出:
4 -> line 0
5 -> line 1
6 -> line 2
观察结果:
idx
从开始cursor
(是4
)。line
从年初开始lines
,这lines[0]
,而不是从lines[4]
。(如果它始于lines[4]
,则它应该已经提出,IndexError: list index out of range
因为的长度lines
仅为3,而我们只能访问lines[0]
,...,lines[2]
。)即start
参数仅影响idx
而不是line
。
我们可以使用list slicing
withenumerate
来从cursor
以下开始访问项目:
lines = ['line 0', 'line 1', 'line 2', 'line 3', 'line 4', 'line 5', 'line 6']
cursor = 4
for idx, line in enumerate(lines[cursor:], cursor): # Used slicing: lines[cursor:]
print(idx, '->', line)
输出:
4 -> line 4
5 -> line 5
6 -> line 6
但缺点是slicing
会创建一个新列表,即not memory efficient
。
一种替代方法是使用islice
,它不会创建新列表,即memory efficient
。
from itertools import islice
lines = ['line 0', 'line 1', 'line 2', 'line 3', 'line 4', 'line 5', 'line 6']
cursor = 4
for idx, line in enumerate(
islice(lines, cursor, len(lines)), # Used 'islice'
cursor,
):
print(idx, '->', line)
输出:
4 -> line 4
5 -> line 5
6 -> line 6
islice
在Python的官方文档中了解更多信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句