【问题标题】:Pythonic way to skip items in an iterable?Pythonic 方式来跳过可迭代项中的项目?
【发布时间】:2017-03-05 17:24:23
【问题描述】:

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

我可以这样做:

# untested, just for explanation

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

但是有没有一个内置的函数,或者一些常见的习语?

【问题讨论】:

    标签: python iterator idioms


    【解决方案1】:

    这是itertools.dropwhile 的基本用例。

    【讨论】:

      【解决方案2】:

      为什么不直接

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

      另外,为什么“我想影响当前的迭代器,而不是返回一个新的。”?我想不出你需要的场景。如果您允许一个新的迭代器来包装当前的迭代器,那么 wim 建议的 itertools.dropwhile 会更加 Pythonic(并且可读性强)。

      【讨论】:

        【解决方案3】:

        您的示例只是在第一个错误结果之后停止,所以这也是一样的:

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

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

        >>> next(it)
        13
        

        【讨论】:

          猜你喜欢
          • 2011-03-25
          • 1970-01-01
          • 2018-03-17
          • 2011-04-19
          • 2013-05-23
          • 2019-08-18
          • 2020-06-11
          • 2021-01-14
          相关资源
          最近更新 更多