使用python中的条件循环

2024-04-26 04:53:23 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑C中的以下代码:

for(int i=0; i<10 && some_condition; ++i){
    do_something();
}

我想用Python写一些类似的东西。我能想到的最好的版本是:

i = 0
while some_condition and i<10:
    do_something()
    i+=1

坦率地说,我不喜欢模拟for循环的while循环。这是由于忘记增加反变量的风险。另一种选择是,应对这种风险:

for i in range(10):
    if not some_condition: break
    do_something()

重要说明

  1. some_condition不是在循环期间计算,而是指定是否首先启动循环

  2. 我指的是Python2.6

您喜欢哪种款式?有没有更好的成语可以这么说?


Tags: and代码in版本forifrangesome
3条回答

一般来说,首选“range+break”样式-但是在Python 2.x中,使用xrange而不是range进行迭代(这将按需创建值,而不是实际生成数字列表)。

但总要看情况。在这种情况下,数字10有什么特别之处?什么是some_condition?等等

对更新的响应:

听起来好像some_condition是一个“循环不变量”,即在循环期间不会改变。在这种情况下,我们应该先测试一下:

if some_condition:
  for i in xrange(10):
    do_something()

在Python中,for具有常量上限的循环有点少见。如果您在somearray上迭代,则可以执行以下操作:

for i in xrange(len(somearray)):
    if not some_condition:
        break
    do_sth_with(i, somearray[i])

或者,更好:

for i, item in enumerate(somearray):
    if not some_condition:
        break
    do_sth_with(i, item)

这也许没有关系,但我习惯了。。。如果some_condition足够简单,则将其放在函数中并迭代filter项:

def some_condition(element):
    return True#False

for i in filter(some_condition, xrange(10)):
    pass

也可以在遍历某些元素列表时使用此方法。

selected = filter(some_condition, to_process)
for i, item in enumerate(selected):
    pass

同样,这可能不是您的情况,您应该根据您的问题选择筛选项目的方法。

相关问题 更多 >