Python 简单迭代
我想问一下,最简单的循环方式是什么?假设我想把某个任务重复1000次,下面哪种方式最好?或者有没有更好的方法?
for i in range(1000):
do something with no reference to i
i = 0
while i < 1000:
do something with no reference to i
i += 1
非常感谢!
4 个回答
5
在Python 2中,使用
for i in xrange(1000):
pass
在Python 3中,使用
for i in range(1000):
pass
Python 2.6的性能数据:
$ python -s -m timeit '' 'i = 0
> while i < 1000:
> i += 1'
10000 loops, best of 3: 71.1 usec per loop
$ python -s -m timeit '' 'for i in range(1000): pass'
10000 loops, best of 3: 28.8 usec per loop
$ python -s -m timeit '' 'for i in xrange(1000): pass'
10000 loops, best of 3: 21.9 usec per loop
xrange
比range
更好,因为它生成的是一个生成器,而不是一次性生成整个列表[0, 1, 2, ..., 998, 999]
。这样会占用更少的内存。如果你需要一次性处理整个列表,那就用range
。通常情况下,你会想用xrange
:这就是为什么在Python 3中,xrange(...)
变成了range(...)
,而range(...)
则变成了list(range(...))
。
6
for
循环更简洁,也更容易理解。而在Python中,while
循环用得比较少,除了while True
这种情况。
这里有一点Python的习惯用法:如果你想要做某件事情固定次数,并且不需要用到计数器的话,建议把计数器命名为_
。举个例子:
for _ in range(1000):
# do something 1000 times
8
第一个被认为是符合习惯用法的。在Python 2.x版本中,应该用 xrange
来代替 range
。