关于if语句:如何在Python的一行中为循环编写条件?

How do I write conditional for loops in one line in Python?

例如,我如何浓缩

1
2
3
In [1]: for x in xrange(1,11):
...:     if x%2==0:
...:         print x

一条线?

编辑:谢谢大家!这正是我要找的。不过,为了使这一点更具挑战性,是否有办法添加elif&else,并使其保持在线状态?

要使用前面的示例,

1
2
3
4
5
for x in xrange(1,11):
   if x%2==0:
      print x
   else
      print"odd"


对于您的具体示例:

1
for x in xrange(2, 11, 2): print x

更一般地说,就是否可以在一行上嵌套块而言,答案是否定的。对复合语句的文档进行解释,"套件"可能不包含嵌套的复合语句(如果它是单行形式)。"suite"是由子句控制的语句组(如条件块或循环体)。


可能是这样的:

1
2
3
from __future__ import print_function

map(print, [x for x in xrange(1,11) if x % 2 == 0])


这并不完全相同,也不是"一行",但是考虑删除副作用并使用列表过滤/理解。

1
2
3
4
5
evens = [x for x in xrange(1,11) if x % 2 == 0]
print"
"
.join(evens)
# or (now a saner"one line", the evens-expr could even be moved in-place)
for x in evens: print x


1
2
for x in [y for y in xrange(1,11) if y%2==0]:
  print x