如果/如果列表中有任何理解

时间:2018-02-13 02:55:18

标签: python list

列表理解中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”,那么结果是错误的。

2 个答案:

答案 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带入您正在制作的列表中。