一般来说,当您想在Python中迭代列表的一部分时,最简单的方法就是对列表进行切片.

# Iterate over everything except the first item in a list
#
items = [1,2,3,4]
iterrange = (x for x in items[1:])

但是slice操作符创建了一个新的列表,在很多情况下甚至不需要这样做.理想情况下,我希望使用某种切片功能来创建生成器,而不是新的列表对象.类似的事情可以通过创建一个生成器表达式来实现,该表达式使用range只返回列表的某些部分:

# Create a generator expression that returns everything except 
# the first item in the list
#
iterrange = (x for x, idx in zip(items, range(0, len(items))) if idx != 0)

但这有点麻烦.我想知道是否有更好、更优雅的方法来做到这一点.那么,对列表进行切片以创建生成器表达式而不是创建新的列表对象的最简单方法是什么?

推荐答案

使用itertools.islice:

import itertools

l = range(20)

for i in itertools.islice(l,10,15):
    print i

10
11
12
13
14

从文件中:

生成一个迭代器,从iterable返回选定的元素

Python-3.x相关问答推荐

如何从拼图分区数据集中读取数据到Polar

如何验证具有内部json字符串的json字符串?

如何检索与美汤相似的标签中的文本?

泛型类型的参数的静态类型

Python GUI:tkinter应用程序作为Windows的实时桌面

类变量的Python子类被视为类方法

Pandas教程:如何更新行内数值的位置

如何将多输入数据加载器传递给单输入模型

无法提出给定 for 循环的原因 (Python 3.11)

裁剪复数以解决 exp 中的溢出错误

如何在两个矩阵的比较中允许任何列的符号差异,Python3?

列出相同索引的Pandas

XPATH:使用 .find_elements_by_xpath 为未知数量的 xpath 输入值

参数化泛型不能与类或实例判断一起使用

ImportError:没有名为资源的模块

创建日志(log)文件

Python heapify() 时间复杂度

如果一个失败,如何取消收集中的所有剩余任务?

使用 urllib3 忽略证书验证

将列表列表转换为Python中的字典字典