首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Pythonic式的FOR循环和IF语句组合方式

Pythonic式的FOR循环和IF语句组合方式
EN

Stack Overflow用户
提问于 2011-08-08 19:56:17
回答 6查看 515K关注 0票数 327

我知道如何在单独的行上同时使用for循环和if语句,例如:

代码语言:javascript
复制
>>> a = [2,3,4,5,6,7,8,9,0]
... xyz = [0,12,4,6,242,7,9]
... for x in xyz:
...     if x in a:
...         print(x)
0,4,6,7,9

我知道,当语句很简单时,我可以使用列表理解来组合这些语句,例如:

代码语言:javascript
复制
print([x for x in xyz if x in a])

但是我在任何地方都找不到一个好的例子(可以复制和学习),它演示了一组复杂的命令(不仅仅是"print x"),这些命令是在for循环和一些if语句的组合之后发生的。我期望的东西看起来像这样:

代码语言:javascript
复制
for x in xyz if x not in a:
    print(x...)

难道这不是python应该的工作方式吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-08-08 20:01:43

您可以像这样使用generator expressions

代码语言:javascript
复制
gen = (x for x in xyz if x not in a)

for x in gen:
    print(x)
票数 396
EN

Stack Overflow用户

发布于 2011-12-23 16:42:32

我个人认为这是最漂亮的版本:

代码语言:javascript
复制
a = [2,3,4,5,6,7,8,9,0]
xyz = [0,12,4,6,242,7,9]
for x in filter(lambda w: w in a, xyz):
  print x

编辑

如果你热衷于避免使用lambda,你可以使用部分函数应用程序,并使用操作符模块(它提供了大多数操作符的函数)。

https://docs.python.org/2/library/operator.html#module-operator

代码语言:javascript
复制
from operator import contains
from functools import partial
print(list(filter(partial(contains, a), xyz)))
票数 21
EN

Stack Overflow用户

发布于 2014-02-19 19:59:58

我可能会使用:

代码语言:javascript
复制
for x in xyz: 
    if x not in a:
        print(x...)
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6981717

复制
相关文章

相似问题

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