使用 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 if while continue break语句
Python中的if else 和while else的用法
[第三节] Python流程控制语句 - if, while, for, break, continue