我注意到最近一段代码直接比较了两个整数列表,如下所示:
a = [10,3,5, ...]
b = [5,4,3, ...,]
if a > b:
...
Run Code Online (Sandbox Code Playgroud)
这似乎有点奇怪,但我想True
如果所有list_a
的元素都大于那么它会返回list_b
,如果每个元素相等或者list_b
元素比那些元素大,则会返回False list_a
.所以我测试了它:
>>> a=[3,3,3,3]
>>> b=[4,4,4,4]
>>> a>b
False
>>> b>a
True
Run Code Online (Sandbox Code Playgroud)
好的,有效.同样如下:
>>> b = [1,1,1,1]
>>> a = [1,1,1,1]
>>> a>b
False
>>> b>a
False
Run Code Online (Sandbox Code Playgroud)
但是当它变得更模糊时:
>>> a=[1,1,3,1]
>>> b=[1,3,1,1]
>>> a>b
False
>>> b>a
True
Run Code Online (Sandbox Code Playgroud)
要么:
>>> a=[1,3,1,1]
>>> b=[1,1,3,3]
>>> a>b
True
>>> b>a
False
Run Code Online (Sandbox Code Playgroud)
结果有点陌生.python究竟在做什么?似乎它返回结果有利于第一个列表,其中最左边的元素大于相应的?
小智 16
由于一开始我没有发现使用“字典顺序”对列表/元组比较的解释特别有启发性,因此我尝试“用我自己的话”来解释它。首先,这里有一些示例列表,在下面的解释中引用:
a = [1, 2, 3]
b = [1, 2, 10]
c = [1, 2, 3, 100]
d = [1, 2, 3]
e = [1, 2, 3, 4, 'a']
f = ['a', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)
依次比较每个索引处的项目对。因此,比较a
于b
将导致1
被比较1
,2
被比较2
和3
被比较10
。
当对比较将停止或者不相等的一对物品的被发现或--IF列表具有不同的长度-在达到短列表的末尾。
例如,当比较a
和b
,比较会当停止3
,并10
进行比较。当比较b
和c
,比较将停止时10
和3
进行比较。
一旦找到不相等的对,整体结果就是比较不相等项的结果。无论列表的长度是否相同,这都适用——例如,列表b
大于列表,c
因为100
inc
永远不会起作用。
例如,在比较时a
要b
,总的结果将是比较结果3
来10
。a < b -> True
因为3
小于10
. a > b -> False
因为3
不大于10
. a == b -> False
因为3
不等于10
。
如果其中一个列表较短,并且其 N 项等于较长列表的前 N 项,如a
和c
,则较短的列表将被视为小于较长的列表(因此a
小于c
)。
仅当两个列表的长度相同并且所有项目对比较相等时,它们才会相等。
关于类型的注意事项:如果一对中的项目不可比较,则比较将TypeError
像往常一样失败。例如,比较列表a
到f
时将无法1
进行比较'a'
。但还要注意,listsd
和e
可以进行比较,因为'a'
ine
永远不会与 in 中的任何内容进行比较d
。