Python3:枚举函数中的start参数如何工作?

凯文·斯莫茨

我有一个清单。我想从中处理列表中的项目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
...

我希望enumeratecursor这里开始,但是它从开始0


我敢肯定我误解了一些东西,但是我真的很想了解如何enumerate改进我的Python。

迪彭·达达尼亚(Dipen Dadhaniya)

尝试了解以下简单示例:

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 slicingwithenumerate来从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

islicePython的官方文档中了解更多信息

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章