[英]Loop with conditions in 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
坦率地说,我不喜欢while
模仿循环for
循环。 这是由于忘记增加计数器变量的风险。 另一个选择是增加这种风险:
for i in range(10):
if not some_condition: break
do_something()
重要的澄清
some_condition
不是要在循环期间计算,而是指定是否首先启动循环
我指的是Python2.6
哪种款式首选? 有没有更好的成语呢?
这可能没有关系,但是我已经习惯了...如果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
同样,这可能不是您的情况,您应该根据您的问题选择过滤项目的方法。
通常,首选“ range
+ break
”样式 - 但在Python 2.x中,使用xrange
而不是迭代range
(这会按需创建值而不是实际创建数字列表)。
但它总是取决于。 在这种情况下,10号的特殊之处是什么? some_condition
究竟是some_condition
? 等等。
对更新的回应:
听起来好像some_condition
是“循环不变”,即在循环期间不会改变。 在这种情况下,我们应该先测试它:
if some_condition:
for i in xrange(10):
do_something()
具有常量上限的for
循环在Python中有点罕见。 如果你迭代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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.