【发布时间】:2011-04-25 19:12:55
【问题描述】:
(在 Python 3.1 中) (与another question I asked 有点相关,但这个问题是关于迭代器被耗尽的问题。)
# trying to see the ratio of the max and min element in a container c
filtered = filter(lambda x : x is not None and x != 0, c)
ratio = max(filtered) / min(filtered)
我花了半个小时才意识到问题出在哪里(过滤器返回的迭代器在它到达第二个函数调用时已经耗尽)。如何以最 Pythonic / 规范的方式重写它?
另外,除了获得更多经验之外,我还能做些什么来避免此类错误? (坦率地说,我不喜欢这种语言特性,因为这些类型的错误很容易制造,很难捕捉。)
【问题讨论】:
-
当您知道自己在做什么时,不难发现。使用 python2 尝试以下代码:
python -m timeit "r = xrange(1000000000)"和python -m timeit "r = range(1000000000)"。正如您所见,迭代器毕竟不是必需的,在 python3 中range()的行为确实类似于xrange()。
标签: python filter iterator python-3.x