itertools 的 islice(count()) 与 range()
itertools' islice(count()) vs range()
真正的快速:
我刚看到一个 tutorial,其中显示我们可以像这样一起使用 itertools 的 islice() 和 count():
for num in islice(count(), start, stop, step):
print(num)
这样做而不是使用 range() 有什么好处吗?
Is there any advantage in doing this instead of using range() ?
在这个例子中没有优势,range
将是规范的解决方案。
itertools.islice
如果你有一个任意的迭代器(特别是它没有像范围这样的随机访问行为)就变得很重要。
假设您打开了一个文件并想忽略前四行,然后每隔一行打印一次。
使用 islice 这变得简单:
with open(path, 'r') as f:
for line in islice(f, start=5, stop=None, step=2):
print(line)
islice
与 counter
的一种可能组合,无法用 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
是一个生成器而不是一个列表(这肯定会耗尽你的内存。)
真正的快速:
我刚看到一个 tutorial,其中显示我们可以像这样一起使用 itertools 的 islice() 和 count():
for num in islice(count(), start, stop, step):
print(num)
这样做而不是使用 range() 有什么好处吗?
Is there any advantage in doing this instead of using range() ?
在这个例子中没有优势,range
将是规范的解决方案。
itertools.islice
如果你有一个任意的迭代器(特别是它没有像范围这样的随机访问行为)就变得很重要。
假设您打开了一个文件并想忽略前四行,然后每隔一行打印一次。
使用 islice 这变得简单:
with open(path, 'r') as f:
for line in islice(f, start=5, stop=None, step=2):
print(line)
islice
与 counter
的一种可能组合,无法用 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
是一个生成器而不是一个列表(这肯定会耗尽你的内存。)