【发布时间】:2011-02-11 17:30:14
【问题描述】:
我正在寻找一种 Pythonic 方法来迭代可迭代的第一个 n 项目(upd:在常见情况下不是列表,因为列表是微不足道的),它是尽可能快地做到这一点非常重要。这就是我现在的做法:
count = 0
for item in iterable:
do_something(item)
count += 1
if count >= n: break
在我看来并不整洁。另一种方法是:
for item in itertools.islice(iterable, n):
do_something(item)
这看起来不错,问题是与某些生成器一起使用是否足够快?例如:
pair_generator = lambda iterable: itertools.izip(*[iter(iterable)]*2)
for item in itertools.islice(pair_generator(iterable), n):
so_something(item)
与第一种方法相比,它的运行速度是否足够快? 有更简单的方法吗?
【问题讨论】:
-
回答“足够快”的唯一方法是自己进行基准测试。
-
为什么“尽可能快地做到这一点非常重要”?你能用 pstats 结果来证明这一点吗?我怀疑您使用
islice的解决方案实际上会证明性能方面最合理的解决方案,但当然我们不知道没有时间。
标签: iterator performance python generator