使用 if 和 break 创建 Python 列表推导式

Posted

技术标签:

【中文标题】使用 if 和 break 创建 Python 列表推导式【英文标题】:Creating a Python list comprehension with an if and break 【发布时间】: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]

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

任何帮助将不胜感激。

【问题讨论】:

【参考方案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 倍

以上是关于使用 if 和 break 创建 Python 列表推导式的主要内容,如果未能解决你的问题,请参考以下文章

Python判断循环语法

Python if while continue break语句

Python中的if else 和while else的用法

[第三节] Python流程控制语句 - if, while, for, break, continue

python从入门到放弃-day05-用户登录(for , if ,break)

python基础;if else;for;while 分支处理.continue,break