python - 等效于迭代器的 cdr/rest
问题描述
给定一个迭代器(比如一个无限序列iter = itertools.count()
),我可以得到第一个next(iter)
。除了第一个之外,你得到所有东西的反面是什么?
我意识到我能做到
def rest(iter):
next(iter)
return (x for x in iter)
但是没有内置的东西吗?
解决方案
你可以先分开,然后休息
first, *rest = iter
但这实现了整个迭代器——rest
现在包含一个列表。
您还可以使用itertools.islice
基于 start、stop 和 step 来获取可迭代的子集。
>>> from itertools import islice
>>> [*range(9)]
[0, 1, 2, 3, 4, 5, 6, 7, 8]
>>> [*islice(range(9), 1, None)]
[1, 2, 3, 4, 5, 6, 7, 8]
Anislice
仍然是惰性的,如果迭代器是无限的或很长,这可能会更可取。
了解迭代器包含状态并且是可变的。所以一旦你有了一个迭代器,如果你拿下一个,那么它就不再在它的其余部分了。
>>> spam = iter(range(9))
>>> next(spam)
0
>>> [*spam]
[1, 2, 3, 4, 5, 6, 7, 8]
推荐阅读
- javascript - 我应该使用 react-google-maps 还是在 react 中注入 google-map?
- sql - 在尝试更改 SQL 中的表时,我收到一条错误消息,提示在新的更改操作开始之前缺少逗号
- reactjs - 是否可以从其他商店修改商店?
- javascript - 分组/嵌套获取函数
- python-pptx - 您如何从条形图或数据标签中获取左值、右值、底部值和顶部值
- powershell - 将停止和启动服务的时间戳打印到 .txt 文件中
- angular - 如何在 Angular/TypeScript 中使用 flatpickr rangePlugin
- java - 支持文本字段中的 RTL(阿拉伯语)
- jquery - 多个 (8) Ajax 请求未同时获取内容
- java - JavaCard 3 Eclipse 转换器错误,找不到包 org.globalplatform 的导出文件 globalplatform.exp