【问题标题】:Matching Iterators With Discard In Python在 Python 中将迭代器与丢弃匹配
【发布时间】:2013-05-26 23:52:24
【问题描述】:

有什么办法可以做到这意味着:

a, b, ... = count()

我们的想法是匹配(在本例中为无限)迭代器中的前两个值,并丢弃其余的值。

我能做的最好的就是笨重:

a, b = islice(count(), 0, 2)

这需要您计算左侧的条目数。

我缺少一个很酷的技巧吗?

【问题讨论】:

  • 笑话:globals().update(dict(zip(('a','b'), count())))?
  • 有没有办法获取函数参数的名称(通过检查帧?)?如果是这样,那可以作为一个函数来实现......哦,不,也许它不能。我猜范围是错误的。

标签: python iterator pattern-matching


【解决方案1】:

不,没有简单的方法,除非你明确告诉你想要的元素数量。

Python-ideas 邮件组对此进行了很多讨论(我想是去年年底他们介绍 the enum library 时),但没有人同意解决这个问题的方法。

对于 finite 迭代器,在 Python 3 上您可以使用:

a, b, *_ = thing()

_ 变量可能会被忽略。

【讨论】:

  • 谢谢。毫不奇怪,也许,我也在考虑枚举... *_ 东西很可爱,我不知道它存在(由于时间限制,还不能将答案标记为正确)
  • *_ 将评估整个迭代器。
  • @andrewcooke _ 只是一个一次性的名字。它将评估整个迭代器,所以只能在有限的迭代器上使用!
  • 是的,我意识到 - 我没有意识到 * 前缀可以在那里使用。
  • @andrewcooke 分离列表的第一个/最后一个元素非常方便:a, *b = [1, 2, 3]
猜你喜欢
  • 1970-01-01
  • 2018-04-06
  • 2014-09-22
  • 2016-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多