我需要c风格循环:
for( int i = 0; i < n; i++ )
我已经找到了相同的东西,但是当迭代次数很多时,它会占用大量内存。
for i in range( 0, n ):
还有其他等价物吗?
答案 0 :(得分:3)
您可以使用xrange而不是range,它使用生成器而不是构建整个列表。
答案 1 :(得分:3)
使用xrange
代替range
来阻止预先构建列表。这将降低您的内存成本。
当计数器到达while
时,使用带有计数器的break
循环和n
。
通常,我发现在Python编码时使用C
样式循环是一个隐藏的风格问题。你究竟想做什么?
答案 2 :(得分:2)
使用xrange
for i in xrange(n):
返回迭代器而不是列表。或升级到Python 3,其中range
获取xrange
的语义。
答案 3 :(得分:1)
xrange
将比range
消耗更少的内存。
区别在于range
将所有范围值存储在列表中,而xrange
只是逐个产生值。
答案 4 :(得分:1)
如果在循环开始时未知n
,则可以从itertools迭代count
。
from itertools import count
for i in count():
if some_condition(i):
break
do_stuff()
count
迭代器采用可选的 start 和 step 参数。我认为上面比通常的做法更加pythonic,这是
i = 0
while not some_condition(i):
do_stuff()
i += 1
i = 0
设置让我对此方法感到困扰,并且随着while
和break
语句的添加,continue
块的内容变得越来越复杂,请确保{ {1}}变量增加变为繁琐且容易出错的任务。这种重新安排解决了最后一个问题:
i
但与使用i = -1
while True:
i += 1
if some_condition(i):
break
do_stuff()
相比,它仍然凌乱而且不优雅。
答案 5 :(得分:0)
在较旧的Pythons中,使用xrange()
代替range()
,它不会创建实际的(内存中)列表。