python any()的工作方式不同,为什么[1,3,5]中的any([1,2])返回True,而不是['a','v','x']中的任何(['a','b'])?


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"时隐式转换为布尔值('a' --> True(,但在使用"in"时会完全匹配(1 就像 True 的内部表示(。

any(x)返回True当且仅当x的任何元素计算结果为True

所以,any([1,2]) in [1,3,5]首先评估any([1, 2])哪个是True,因为1是"真实的",然后做True in [1, 3, 5]

True in [1, 3, 5]之所以Truein是因为测试项目与in之前的任何内容的相等性。因为,在Python中,True == 1True确实在[1, 2, 3]

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

那么为什么第二个False呢?

这是因为"真实性"和等效性之间的区别。

any(['a', 'b'])也是True.自bool('a') == True年以来,"a"是"真实的"。但是True != 'a',所以它在第二部分就掉下来了,因为'a'和"真"并不等同,也就是说,True不在['a', 'v', 'b']中。

正确的任何用法是:

>>> 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()

any()采用可迭代对象,如果可迭代对象中的任何值为 true,则返回 True,否则返回 False。

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

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

你在简单的可迭代[1,2]上调用any(),任何非零数都是真数,所以any()返回True

True恰好有一个整数值 1,所以你的语句等效于1 in [1,3,5],这是真的。

你实际上想要这个:

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

这正在分两部分进行评估...

any(['a','b'])Trueany([1,2])也是。所以你真的在问 python"True在下面的列表中吗?

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

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

相关内容

最新更新