【问题标题】:Creating a Python list comprehension with an if and break使用 if 和 break 创建 Python 列表推导式
【发布时间】:2012-02-19 07:21:44
【问题描述】:

是否可以将此代码转换为列表理解?

for i in userInput:
    if i in wordsTask:
        a = i
        break

我知道如何转换它的一部分:

[i for i in userInput if i in wordsTask]

但我不知道如何添加中断,并且文档没有太大帮助。

任何帮助将不胜感激。

【问题讨论】:

    标签: python if-statement for-loop list-comprehension


    【解决方案1】:
    a = next(i for i in userInput if i in wordsTask)
    

    稍微分解一下:

    [i for i in userInput if i in wordsTask]
    

    将生成一个列表。您想要的是列表中的第一项。一种方法是使用下一个函数:

    next([i for i in userInput if i in wordsTask])
    

    Next 返回迭代器的下一项。在像列表这样的可迭代的情况下,它最终会获取第一项。

    但没有理由实际构建列表,因此我们可以使用生成器表达式来代替:

    a = next(i for i in userInput if i in wordsTask)
    

    另外,请注意,如果生成器表达式为空,则会导致异常:StopIteration。您可能想要处理这种情况。或者你可以添加一个默认值

    a = next((i for i in userInput if i in wordsTask), 42)
    

    【讨论】:

    • 非常好!而且非常微妙 - 鉴于 OP 要求帮助学习列表理解,您可能应该解释这里发生了什么。
    • 请注意,如果len(userInput) == 0 可以是True,那么应该通过next 的第二个参数提供默认值:a = next( (generator expression), default )
    • 请让它更详细一点。
    • 很好,但你忘了:当生成器表达式不是函数的唯一参数时,它需要有括号。
    • @julio.alegria,不,我选择它是因为它是 9 的 6 倍
    猜你喜欢
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-24
    • 2016-02-04
    相关资源
    最近更新 更多