Python中的奇怪比较

mye*_*nso 3 python comparison-operators

我在鬼混,偶然发现了一些我不理解的事情......

问题1:

a = [1,2,3]
b = [1,2,3,4]

len(a) < b
Run Code Online (Sandbox Code Playgroud)

结果是True,但这实际上是在比较两个列表的长度吗?似乎是因为这也是真的......

a = [15,32,7]
len(a) < b
Run Code Online (Sandbox Code Playgroud)

问题2:

当我们尝试将整数与列表进行比较时会发生什么?为什么这些都是真的(我假设有一般性解释......)......

3 < b
20 < b
float('inf') < b
None < b
(lambda x: (x**x)**x) < b
Run Code Online (Sandbox Code Playgroud)

......这些都是假的?

'poo' < b
'0' < b
Run Code Online (Sandbox Code Playgroud)

kin*_*all 6

在Python 2.x中,使用类型名称比较不可直接比较的不同类型的项目.所以所有整数都小于所有列表,因为"int"小于"list".出于同样的原因,所有strs都大于所有ints和floats.

在Python 3中删除了这种不直观的行为(我假设这是因为类似类型的项在异类列表中排序),这为这些比较引发了一个例外.