假设我有一个iterable,并且只要元素与特定谓词匹配就想跳过元素。 我想影响当前的迭代器,而不是返回一个新的。
我可以这样做:
# untested, just for explanation
e = next(iterable)
while True:
if something(e):
e = next(iterable)
else:
break
但是有没有内置函数或者一些常见的习惯用法?
答案 0 :(得分:3)
这是itertools.dropwhile
的基本用例。
答案 1 :(得分:0)
为什么不
e = next(iterable)
while something(e):
e = next(iterable)
另外,为什么“我想影响当前的迭代器,而不是返回一个新迭代器。”?当你需要时,我想不出一个场景。如果你允许一个新的迭代器来包装当前的迭代器,那么wim建议的itertools.dropwhile
就更像Pythonic(并且可读)。
答案 2 :(得分:0)
你的例子只是在第一个错误结果之后停止,所以这样做:
>>> it = iter(range(100000)) # just constructing _an_ iterator
>>> next(itertools.filterfalse(lambda i: i != 12, it))
12
我不清楚 - 究竟是什么 - "我想影响当前的迭代器,而不是返回一个新的"意味着,但请注意it
本身已经提升:
>>> next(it)
13