Python:在for循环中使用理解

cha*_*son 3 python python-2.7

我正在使用Python 2.7.我有一个列表,我想使用for循环迭代该列表的一个子集受某些条件限制.以下是我想要做的事情的说明:

l = [1, 2, 3, 4, 5, 6]
for e in l if e % 2 == 0:
    print e
Run Code Online (Sandbox Code Playgroud)

在我看来它非常整洁和Pythonic,并且在各方面都很可爱,除了语法错误的小问题.这个替代工作:

for e in (e for e in l if e % 2 == 0):
    print e
Run Code Online (Sandbox Code Playgroud)

但是作为罪恶是丑陋的.有没有办法直接添加条件到for循环结构,而不构建生成器?

编辑:您可以假设我实际想要执行的处理和过滤e比上面的示例更复杂.处理尤其不属于一行.

Mar*_*nen 9

简单易读的解决方案有什么问题:

l = [1, 2, 3, 4, 5, 6]
for e in l:
    if e % 2 == 0:
        print e
Run Code Online (Sandbox Code Playgroud)

你可以拥有任何数量的陈述,而不仅仅是一个简单的陈述print e,没有人不得不试图弄清楚它的作用.

如果你需要将子列表用于其他东西(不只是迭代一次),为什么不构造一个新的列表:

l = [1, 2, 3, 4, 5, 6]
even_nums = [num for num in l if num % 2 == 0]
Run Code Online (Sandbox Code Playgroud)

现在迭代了even_nums.还有一行,更具可读性.