在python中循环条件
Posted
技术标签:
【中文标题】在python中循环条件【英文标题】:Loop with conditions in python 【发布时间】:2011-05-18 11:02:12 【问题描述】:考虑下面的 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()
重要说明
some_condition
并不是要在循环过程中计算,而是首先指定是否开始循环
我指的是Python2.6
首选哪种风格?有更好的习惯用法吗?
【问题讨论】:
我认为这是个人喜好问题。 哪个版本的 Python? 我认为 Python 应该有一个类似do <expr> times:
的结构,以允许您明确表明您实际上不会使用循环计数器。
Karl:for _ in range(10)
似乎是一种常用的表示方式,但如果您碰巧使用 gettext,这当然是一个可怕的想法。
【参考方案1】:
这可能不相关,但这是我习惯做的事情......如果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
同样,这可能不是你的情况,你应该根据你的问题选择过滤项目的方法。
【讨论】:
或者,让它更短,可读性更差:for i in filter(lambda x: True, range(10)): do_something()
【参考方案2】:
一般来说,“range
+ break
”样式是首选 - 但在 Python 2.x 中,使用 xrange
而不是 range
进行迭代(这会按需创建值而不是实际生成一个数字列表)。
但这总是取决于。在这种情况下,数字 10 有什么特别之处? some_condition
到底是什么?等等。
对更新的回应:
听起来some_condition
是一个“循环不变量”,即在循环期间不会改变。在这种情况下,我们应该先对其进行测试:
if some_condition:
for i in xrange(10):
do_something()
【讨论】:
10 和 range 只是示例,这可能是for i in my_array
。正如问题中所阐明的,some_condition
控制程序是需要执行循环还是完全跳过它
您的版本简单明了且有效。我只是想节省额外的缩进。谢谢【参考方案3】:
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)
【讨论】:
以上是关于在python中循环条件的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法在 Python (3) for 循环中执行条件?