假设我有列表list_1
,并且我想遍历其元素,从索引i
到(j - 1)
,其中j > i
。
据我所知,我的选择是:
选项1:构建一个全新的列表
for element in list_1[i:j]:
# do something
选项2:遍历索引本身
for index in range(i, j):
element = list_1[index]
# do something
两个选项都不可取。第一种选择是不理想的,因为它涉及构建新列表。第二个选项在可读性方面尤其不理想,因为它的迭代遍历索引,而不是遍历列表元素。
是否有内置的生成器函数可在给定范围内的元素上进行迭代?
答案 0 :(得分:4)
您可以使用itertools.islice()
通过索引遍历值的子集:
from itertools import islice
for element in islice(list_1, i, j):
这仍将遍历i - 1
的所有list_1
初始值,但将在C中进行,并且不会在内存中保留跳过的值。
演示:
>>> from itertools import islice
>>> list_1 = [42, 81, 117, 3103, 17, 22]
>>> for elem in islice(list_1, 2, 5):
... print(elem)
...
117
3103
17