首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:在for循环中使用理解

Python:在for循环中使用理解
EN

Stack Overflow用户
提问于 2015-06-26 11:26:54
回答 5查看 122关注 0票数 3

我正在使用Python2.7。我有一个列表,我想使用for循环来迭代该列表的子集,但要满足某些条件。下面是我想要做的事情的一个例子:

代码语言:javascript
复制
l = [1, 2, 3, 4, 5, 6]
for e in l if e % 2 == 0:
    print e

在我看来,这是非常整洁和毕达通的,并且在各个方面都很可爱,除了语法错误这一小问题。这一备选办法是:

代码语言:javascript
复制
for e in (e for e in l if e % 2 == 0):
    print e

但像罪恶一样丑陋。是否有一种方法直接将条件添加到for循环构造中,而不构建生成器?

编辑:您可以假设我实际上想在e上执行的处理和筛选比上面的示例要复杂得多。特别是处理不属于一条线。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-06-26 11:37:38

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

代码语言:javascript
复制
l = [1, 2, 3, 4, 5, 6]
for e in l:
    if e % 2 == 0:
        print e

您可以使用任意数量的语句,而不仅仅是一个简单的print e,没有人需要绞尽脑汁才能弄清楚它是干什么的。

如果您也需要将子列表用于其他事情(而不只是迭代一次),那么为什么不构建一个新列表呢?

代码语言:javascript
复制
l = [1, 2, 3, 4, 5, 6]
even_nums = [num for num in l if num % 2 == 0]

现在在even_nums上迭代。再多一行,就更容易读了。

票数 9
EN

Stack Overflow用户

发布于 2015-06-26 11:40:00

使用filter试试这个

代码语言:javascript
复制
for i in filter(lambda x: not x%2, l):
    print i

或者简单的list comprehension

代码语言:javascript
复制
>>>[i for i in l if not i%2]
票数 2
EN

Stack Overflow用户

发布于 2015-06-26 11:37:57

不能让它那样运作。然而,这里还有其他的节奏曲风格:

代码语言:javascript
复制
print [ e for e in l if e%2==0 ]

如果您想坚持您的风格,请使用以下列表理解:

代码语言:javascript
复制
for e in [x for x in l if x%2==0]:
    print e

因此,这里的e迭代由[x for x in l if x%2==0]定义的列表

好吧,你总是可以用香草的方法:

代码语言:javascript
复制
for e in l:
    if e % 2 == 0:
        print e
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31072039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档