循环条件在python中

Bor*_*lik 10 python coding-style idioms idiomatic

考虑C中的以下代码:

for(int i=0; i<10 && some_condition; ++i){
    do_something();
}
Run Code Online (Sandbox Code Playgroud)

我想在Python中编写类似的东西.我能想到的最好的版本是:

i = 0
while some_condition and i<10:
    do_something()
    i+=1
Run Code Online (Sandbox Code Playgroud)

坦率地说,我不喜欢while模仿for循环的循环.这是由于忘记增加计数器变量的风险.另一个选择是增加这种风险:

for i in range(10):
    if not some_condition: break
    do_something()
Run Code Online (Sandbox Code Playgroud)

重要的澄清

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

  2. 我指的是Python2.6

哪种款式首选?有没有更好的成语呢?

Mar*_*óth 9

这可能没有关系,但是我已经习惯了...如果some_condition足够简单,可以将它放在函数和filter迭代的项目中:

def some_condition(element):
    return True#False

for i in filter(some_condition, xrange(10)):
    pass
Run Code Online (Sandbox Code Playgroud)

迭代某些元素列表时,也可以使用此方法.

selected = filter(some_condition, to_process)
for i, item in enumerate(selected):
    pass
Run Code Online (Sandbox Code Playgroud)

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


Kar*_*tel 7

通常,首选" range+ break"样式 - 但在Python 2.x中,使用xrange而不是range迭代(这会按需创建值而不是实际创建数字列表).

但它总是取决于.在这种情况下,10号的特殊之处是什么?到底是some_condition什么?等等.

对更新的回应:

听起来好像some_condition是"循环不变",即在循环期间不会改变.在这种情况下,我们应该先测试它:

if some_condition:
  for i in xrange(10):
    do_something()
Run Code Online (Sandbox Code Playgroud)