我对“any”语法有一些问题。我有两张单子
mainseq = ["hali", "hulu", "habi"]
seq = ["a", "b", "c", "d"]
我想找出seq
中的元素是否存在于mainseq
中
for each in seq:
if any(each in halum for halum in mainseq):
print each
这给了我预期的“a”和“b”。但是当我删除“any”语法时,我得到了seq
中的所有值,即使mainseq
中没有“c”和“d”
for each in seq:
if (each in halum for halum in mainseq):
print each
使用和不使用的“any”函数在幕后发生了什么
要了解发生了什么,您可以通过打印等效的列表理解和
boolean
表示和any
来调试它:但是请记住,生成器将始终计算为
True
,因为生成器没有显式的布尔表示,并且没有长度(请参见Truth-value-testing in the official documentation)另一方面
any
消耗生成器,仅当任何元素为True
时才返回True
。这是each == a
和each == b
的情况。因此if
条件并不总是被触发any
返回布尔值True
或False
您的语句
(each in halum for halum in mainseq)
返回一个计算结果为truthy值的生成器,因此代码总是位于if
块中。 下面是一段更详细的代码,解释了这一点:http://ideone.com/AQ7dRs
产出:
(each in halum for halum in mainseq)
是一个generator expression。生成器表达式是truthy value。在if
语句中仅使用它将始终是True
,因此套件将始终被执行^{True
时,使用它才会执行套件相关问题 更多 >
编程相关推荐