在python中的c样式循环

时间:2011-07-12 09:26:07

标签: python loops

我需要c风格循环:

for( int i = 0; i < n; i++ )

我已经找到了相同的东西,但是当迭代次数很多时,它会占用大量内存。

for i in range( 0, n ):

还有其他等价物吗?

6 个答案:

答案 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只是逐个产生值。

http://docs.python.org/library/functions.html#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设置让我对此方法感到困扰,并且随着whilebreak语句的添加,continue块的内容变得越来越复杂,请确保{ {1}}变量增加变为繁琐且容易出错的任务。这种重新安排解决了最后一个问题:

i

但与使用i = -1 while True: i += 1 if some_condition(i): break do_stuff() 相比,它仍然凌乱而且不优雅。

答案 5 :(得分:0)

在较旧的Pythons中,使用xrange()代替range(),它不会创建实际的(内存中)列表。