将列表与Python中的int比较

时间:2019-02-20 13:49:05

标签: python python-2.7

我注意到,令我惊讶的是

a = [1,2,3]
a > 8
Out[8]: 
True
a = [1,2,3,4,5,6,7,8,9,10,11,12]
a>8
Out[10]: 
True
[]>8
Out[11]: 
True

为什么会这样?此操作实际上在做什么?我还尝试了任意大数字的字符串列表,它们全部恢复为真。

2 个答案:

答案 0 :(得分:2)

人们可能认为Python 2按字母顺序比较名称:

print(list>int)  # True
print(set>list)  # True
print(float<int) # True

直到您尝试

print(dict<list) # False 

然后,您需要阅读文档:comparisons

  

不同类型的对象(不同的数字类型和不同的字符串类型除外)永远不会比较相等;这样的对象 被一致地但任意地 排序(以便对异构数组进行排序会产生一致的结果)。此外,某些类型(例如文件对象)仅支持退化的比较概念,其中该类型的任何两个对象都不相等。

     

同样,这些对象任意但始终如一地排序。当任何操作数为复数时,<<=>>=运算符将引发TypeError异常。

(重点是我的)

这允许您执行以下操作:

k = [ 1, "a", 'c', 2.4, {1:3}, "hallo", [1,2,3], [], 4.92, {}]  # wild mix of types
k.sort()  # [1, 2.4, 4.92, {}, {1: 3}, [], [1, 2, 3], 'a', 'c', 'hallo'] type-sorted

在python 3中,您得到

  

TypeError:'>'在...和...的实例之间不支持


答案 1 :(得分:0)

我不太确定答案,但我认为这可能是大小(就此对象占用的内存而言)比较。

尝试一下:

import sys
sys.getsizeof([])
> 72
a = [1,2,3]
sys.getsizeof(a)
> 96

如果您想进行这样的列表比较,则应该或多或少地这样做:

a = [1, 2, 3]
sum(a) > 8
> False