Python中的奇怪比较
我在鬼混,偶然发现了一些我不懂的东西 问题1: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)
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)