a = next(i for i in userInput if i in wordsTask)
@H_502_2@
分解一下:
[i for i in userInput if i in wordsTask]
@H_502_2@
将产生一个清单。您想要的是列表中的第一项。一种方法是使用下一个功能:
next([i for i in userInput if i in wordsTask])
@H_502_2@
Next返回迭代器的下一项。在像列表这样的可迭代的情况下,它最终采用了第一项。
但是没有理由真正构建列表,因此我们可以改用生成器表达式:
a = next(i for i in userInput if i in wordsTask)
@H_502_2@
另外,请注意,如果生成器表达式为空,则会导致异常:StopIteration@H_502_2@。您可能要处理这种情况。或者您可以添加默认
a = next((i for i in userInput if i in wordsTask), 42)
@H_502_2@