首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >itertools.count和itertools.islice的意义是什么?

itertools.count和itertools.islice的意义是什么?
EN

Stack Overflow用户
提问于 2022-02-06 11:18:27
回答 1查看 194关注 0票数 1

我看过一个在线课程,它们有如下例子:

代码语言:javascript
复制
from itertools import count
  
# creates a count iterator object
iterator =(count(start = 0, step = 2))
  
# prints an even list of integers
print("Even list:", 
      list(next(iterator) for _ in range(5)))

..。您可以使用rangenp.arange编写。下面是另一个例子:

代码语言:javascript
复制
# list containing some strings
my_list =["x", "y", "z"]
  
# count spits out integers for 
# each value in my list
for i in zip(count(start = 1, step = 1), my_list):
    print(i)

..。这基本上就是enumerate。所以我的问题是:你能给出一个itertools.countitertools.islice的例子吗?它不能用range做(或者必须做得更笨重)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-06 13:26:18

这里有一种情况,即count实例是偶尔使用的,而不是在单个循环中立即使用。

代码语言:javascript
复制
class Foo:
    _x = count()  # Infinite supply of unique integer values

    def __init__(self):
        self._id = f'Foo #{next(self._x)}'

下面是使用islice防止O(n)内存使用的情况:

代码语言:javascript
复制
def is_sorted(some_list):
    return all(i <= j for i, j in zip(some_list, islice(some_list, 1, None)))

如果你把它写成

代码语言:javascript
复制
def is_sorted(some_list):
    return all(i <= j for i, j in zip(some_list, some_list[1:]))

在对第一对some_list进行测试之前,您将不得不制作几乎完整的[2, 1] + [3] * 10000副本,这对[2, 1] + [3] * 10000这样的大列表来说是一种巨大的浪费。

任何一个都不是必要的,因为每一个都是微不足道的定义:

代码语言:javascript
复制
def count(start=0, step=1):
    while True:
        yield start
        start += step

# A more accurate translation would be more complicated than necessary for our purposes here.
# The real version would have to be able to handle stop=None
# and choose 1 and -1 as default values for step, depending
# on whether stop is less than or greater than start.
def islice(itr, start, stop, step):
    for _ in range(start):
        next(itr)

    while start < stop:
        yield next(itr)
        start += step
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71006606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档