列表理解中if / if any之间有什么区别?
代码:
return [word for word in words if any(set(word.upper()) <= set(row) for row in ('QWERTYUIOP', 'ASDFGHJKL', 'ZXCVBNM'))]
给了我预期的结果。但是,如果我使用“if”而不是“if any”,那么结果是错误的。
答案 0 :(得分:1)
(set(word.upper()) <= set(row) for row in ('QWERTYUIOP', 'ASDFGHJKL', 'ZXCVBNM'))
是一个生成器表达式。 if
始终将此视为True
值
any
是一个功能。它迭代生成器表达式并返回一个bool
没有“如果有的话”它是“如果[某种表达]”any
是表达式的一部分
答案 1 :(得分:1)
这样想。 any
方法在满足您要查找的条件时将返回True
,因为它会在集合上进行迭代。换句话说,一旦满足您的条件,它就会“短路”。
因此,在您的any
内,您正在确定此True
条件。一旦你移出它,整体理解中的if
只是检查any
实际上是否确实返回True
。如果是True
(又称if
通过True
检查),则将word
带入您正在制作的列表中。