python any() 的工作方式不同,为什么 any([1,2]) in [1,3,5] returns True 但不是 any(['a','b' ]) 在 ['a','v','x'] 中?

python any() works differently , why any([1,2]) in [1,3,5] returns True but not any(['a','b']) in ['a','v','x']?

any([1,2]) in [1,3,5]

输出是 True 这是正确的但是

any(['a','b']) in ['a','v','x']

给出 False 哪个是错误的 ??
为什么在 python 中出现这种行为??

它们实际上是两个操作:

首先评估'any',然后检查结果是否在另一个列表中:

any(list) --> is there any item in the list that is equivalent to True?

any([1, 2]) --> True, any non-zero integer is equivalent to True!
any(['a', 'b']) --> True, any character is equivalent to True!

然后

is the result (True) in [1, 3, 5]? --> Yes! 1 and True are actually the same!
is the result (True) in ['a','v','x']? --> No! True (or 1) is not in the list

您可以使用 'set' 解决您的问题:

set([1, 2]) & set([1, 3, 5]) --> set([1]) --> True, any non-empty set is equivalent to True!

set(['a','b']) & set(['a','v','x']) --> set(['a']) --> True, any non-empty set is equivalent to True!

如评论中所述,Python 在使用 'any' 时隐式转换为 bool ('a' --> True) 但进行精确匹配(1 就像是内部表示True) 使用 'in'.

正确的 any 用法是:

>>> any(x in ['a','v','x'] for x in ['a', 'b'])
True
>>> any(x in ['a','v','x'] for x in ['ea', 'b'])
False

你需要逐元素检查。

分两部分进行评估...

any(['a','b'])True,也是 any([1,2])。所以你真的在问 python "Is True in the following list?"

你只是碰巧在第一个例子中很幸运,1 被 python 视为等同于 True,所以就它而言,True 1, 2, 3

中是

尝试... any(1, 2, 3) in (3, 4) ...错误。因为 1 不在第二个列表中。

您没有正确使用 any()

any() 接受一个可迭代对象,如果可迭代对象中的任何值是真值,则它 returns 真,否则它 returns 假。

因此,在您的第一个示例中:

any([1,2]) in [1,3,5]

您在简单的可迭代对象 [1,2] 上调用 any(),并且任何非零数都是真实的,因此 any() returns True.

True恰好有一个整数值1,所以你的说法等价于1 in [1,3,5],是真的。

您实际上想要这个:

any(x in [1,3,5] for x in [1,2])

any(x) returns True 当且仅当 x 的任何元素计算为 True.

因此,any([1,2]) in [1,3,5] 首先计算 any([1, 2]),即 True,因为 1 是 'Truthy',然后 True in [1, 3, 5]

True in [1, 3, 5]True 因为 in 测试项目与 in 之前的项目是否相等。因为,在 Python、True == 1True 确实在 [1, 2, 3]

因此 any([1,2]) in [1,3,5]True!

那为什么第二个False

这是因为'truthiness'和等价的区别。

any(['a', 'b']) 也是 True。因为bool('a') == True,'a'就是'truthy'然而,True != 'a',所以在第二部分倒下了,因为'a'和'True'不等价True 不在 ['a', 'v', 'b'] 中。