使用if和break创建Python列表理解

使用if和break创建Python列表理解,python,if-statement,for-loop,list-comprehension,Python,If Statement,For Loop,List Comprehension,是否可以将此代码转换为列表 for i in userInput: if i in wordsTask: a = i break 我知道如何转换它的一部分: [i for i in userInput if i in wordsTask] 但我不知道如何添加中断,文档也没有太大帮助 任何帮助都将不胜感激 a = next(i for i in userInput if i in wordsTask) 要稍微细分一下: [i for i in user

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

for i in userInput:
    if i in wordsTask:
        a = i
        break
我知道如何转换它的一部分:

[i for i in userInput if i in wordsTask]
但我不知道如何添加中断,文档也没有太大帮助

任何帮助都将不胜感激

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返回迭代器中的下一项。在iterable类似于列表的情况下,它最终会占用第一项

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

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((生成器表达式),default)
请再详细一点。很好,但您忘记了:当生成器表达式不是函数的唯一参数时,需要在其周围有括号。@julio.alegria,不,我选择它是因为它是六乘九