使用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,不,我选择它是因为它是六乘九