Itertools' islice(count()) vs range()



真正快速的一个:

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

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

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

这样做而不是使用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的一种可能组合是,如果您有一个未完成的循环(stop = None(,则无法用range替换。假设你想打印所有从三开始的素数。

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

这里特别重要的是,uneven_numbers是一个生成器,而不是一个列表(这肯定会占用你的内存(

最新更新