我注意到,令我惊讶的是
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
为什么会这样?此操作实际上在做什么?我还尝试了任意大数字的字符串列表,它们全部恢复为真。
答案 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