繁体   English   中英

itertools 的 islice(count()) vs range()

[英]itertools' islice(count()) vs range()

真正的快一个:

我刚刚看到一个教程,他们展示了我们可以像这样一起使用 itertools 的 islice() 和 count() :

for num in islice(count(), start, stop, step):
    print(num)

这样做而不是使用 range() 有什么好处吗?

这样做而不是使用 range() 有什么好处吗?

在此示例中,没有优势, range将是规范的解决方案。

itertools.islice如果你有一个任意的迭代器(特别是它没有随机访问行为,比如范围),它就变得很重要。 假设您打开了一个文件并想忽略前四行,然后每隔一行打印一次。 使用 islice,这变得很简单:

with open(path, 'r') as f:
    for line in islice(f, start=5, stop=None, step=2):
        print(line)

islicecounter的一种可能组合,不能用range替换,是如果你有一个非完成循环( stop = None )。 假设您要打印从三开始的所有素数。

uneven_numbers = islice(count(), start=3, stop=None, step=2):
for num in uneven_numbers:
    if is_prime(num):
        print(num)

在这里, uneven_numbers是一个生成器而不是一个列表尤其重要(这肯定会耗尽你的 memory。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM