在我看来,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 的任何理由吗?
最佳答案
针对您提出的两个示例:
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)
您想要使用迭代器而不是其他方法的原因有很多。如果列表非常大,创建一个包含大子列表的新列表,或者特别是创建一个包含两个其他列表副本的列表,可能会出现问题。使用 islice()
或 chain()
允许您以您想要的方式遍历列表,而无需使用更多内存或计算来创建新的列出。此外,作为 unutbu提到过,您不能对迭代器使用方括号切片或加法。
我希望这已经足够了;还有很多其他答案和其他资源可以解释为什么迭代器很棒,所以我不想在这里重复所有这些信息。
关于python - 为什么我要使用 itertools.islice 而不是普通的列表切片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32172612/