Python中的奇怪比较

Python中的奇怪比较,python,comparison-operators,Python,Comparison Operators,我在鬼混,偶然发现了一些我不懂的东西 问题1: a = [1,2,3] b = [1,2,3,4] len(a) < b a=[1,2,3] b=[1,2,3,4] len(a)

我在鬼混,偶然发现了一些我不懂的东西

问题1:

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

len(a) < b
a=[1,2,3]
b=[1,2,3,4]
len(a)
结果是正确的,但这实际上是在比较两个列表的长度吗?似乎是因为这也是真的

a = [15,32,7]
len(a) < b
a=[15,32,7]
len(a)
问题2:

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

3
…这些是假的吗

'poo' < b
'0' < b
“poo”
在Python2.x中,不可直接比较的不同类型的项使用其类型的名称进行比较。所以所有整数都小于所有列表,因为
“int”
小于
“list”
。出于同样的原因,所有
str
s大于所有
int
s和
float
s

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

关于数据类型:

序列对象可以与具有相同属性的其他对象进行比较 序列类型。比较使用字典顺序:首先 比较前两项,如果它们不同,则确定 比较结果;如果它们相等,则下两项为 比较,依此类推,直到其中一个序列用尽

请注意,比较不同类型的对象是合法的。结果 是确定性的但又是任意的:类型按名称排序。 因此,列表总是比字符串小,字符串总是 小于元组等。比较混合数字类型 根据它们的数值,所以0等于0.0,以此类推

值得注意的是

脚注比较不同类型对象的规则 不应依赖;它们可能会在未来版本的 语言


其他答案很好地解释了正在发生的事情,但比较长度的正确方法是

len(a) < len(b)
len(a)
也适用于
(2,3,4)<[2,3,4]
?我的意思是这是=
“tuple”<“list”
=
False
。谢谢,这很有帮助。那么len(list1)len(list1)是一个整数,而
list2
是一个列表。正如我所说,整数总是小于列表。列表的长度没有被比较。@GrijeshChauhan:在我添加“直接可比”之前,你可能已经抓住了我的答案。元组和列表可以相互比较,因为它们都是序列。@kindall是的,但我刚刚试过我的Python3.3
(2,3,4)<[2,3,4]
给了我
TypeError:Unoderable Types tuple()
。谢谢,关于序列对象的部分非常有用。我认为OP在比较长度方面没有问题。他想得到一个解释,解释为什么他看到了他所目睹的行为。这个答案虽然正确,但并不是真正针对OP的需求。我也这么认为,除了这句话“但这实际上是在比较两个列表的长度”。所以我想我会把它扔出去以防万一。
len(a) < len(b)