Luk*_*lor 15 python iterator list
在我看来,itertools
模块中的许多功能都具有更容易的等价物.例如,据我所知,itertools.islice(range(10),2,5)
做同样的事情range(10)[2:5]
,itertools.chain([1,2,3],[4,5,6])
做同样的事情[1,2,3]+[4,5,6]
.主要文档页面提到了速度优势,但除此之外还有任何理由选择itertools吗?
Cyp*_*ase 22
为了解决你提出的两个例子:
import itertools
data1 = range(10)
# This creates a NEW list
data1[2:5]
# This creates an iterator that iterates over the EXISTING list
itertools.islice(data1, 2, 5)
data2 = [1, 2, 3]
data3 = [4, 5, 6]
# This creates a NEW list
data2 + data3
# This creates an iterator that iterates over the EXISTING lists
itertools.chain(data2, data3)
Run Code Online (Sandbox Code Playgroud)
您想要使用迭代器而不是其他方法的原因有很多.如果列表非常大,则创建包含大型子列表的新列表可能会出现问题,或者尤其是创建包含两个其他列表副本的列表.使用islice()
或chain()
允许您以您希望的方式迭代列表,而无需使用更多内存或计算来创建新列表.另外,正如unutbu所提到的,你不能使用括号切片或添加迭代器.
我希望这已经足够了答案; 有很多其他答案和其他资源解释为什么迭代器很棒,所以我不想在这里重复所有这些信息.
unu*_*tbu 19
itertools.islice
可以切片迭代器.索引仅适用于序列.例如,
In [64]: iterator = (x**2 for x in range(10))
In [65]: list(IT.islice(iterator, 2, 5))
Out[65]: [4, 9, 16]
In [66]: iterator[2:5]
TypeError: 'generator' object has no attribute '__getitem__'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9152 次 |
最近记录: |