如何在迭代中以Pythonic方式跳过项目?

2024-09-24 22:25:18 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个iterable,只要元素与一个特定的谓词匹配,就跳过元素。我想影响当前的迭代器,而不是返回一个新的迭代器。在

我可以这么做:

# untested, just for explanation

e = next(iterable)
while True:
    if something(e):
        e = next(iterable)
    else:
         break

但是有没有内置的函数,或者一些常见的习惯用法呢?在


Tags: true元素forifiterableelse内置something
3条回答

为什么不只是

e = next(iterable)
while something(e):
  e = next(iterable)

还有,为什么“我想影响当前迭代器,而不是返回一个新的迭代器。”?我想不出你什么时候需要的。如果允许一个新的迭代器来包装当前的迭代器,itertools.dropwhilewim建议的迭代器更加python(并且可读)。在

这是^{}的基本用例。在

您的示例只是在第一个错误结果之后停止,因此这是相同的:

>>> it = iter(range(100000)) # just constructing _an_ iterator
>>> next(itertools.filterfalse(lambda i: i != 12, it))
12

我不清楚“我想影响当前迭代器,而不是返回一个新的迭代器”是什么意思,但是请注意,it本身已经进步了:

^{pr2}$

相关问题 更多 >