我注意到最近直接比较了两个整数列表的代码:
a = [10,3,5, ...]
b = [5,4,3, ...,]
if a > b:
...
这看起来有点奇怪,但我想如果True
的所有元素都大于list_a
,那么它将返回list_b
,如果每个元素相等,则返回False { {1}}的元素大于list_b
的元素。所以我测试了它:
list_a
好的,有效。同样如下:
>>> a=[3,3,3,3]
>>> b=[4,4,4,4]
>>> a>b
False
>>> b>a
True
但是当它变得更模糊时:
>>> b = [1,1,1,1]
>>> a = [1,1,1,1]
>>> a>b
False
>>> b>a
False
或:
>>> a=[1,1,3,1]
>>> b=[1,3,1,1]
>>> a>b
False
>>> b>a
True
结果有点陌生。 python究竟在做什么?似乎它返回结果有利于第一个列表,其中最左边的元素大于相应的?
答案 0 :(得分:35)
来自Python教程中的Comparing Sequences and Other Types:
比较使用词典排序:首先比较前两个项目,如果它们不同,则确定比较的结果;如果它们相等,则比较接下来的两个项目,依此类推,直到任一序列用完为止。
另见维基百科关于lexicographical order的文章。
答案 1 :(得分:3)
由于我没有找到使用"词典排序"列表/元组比较的解释。一开始特别有启发性,这里试图用我自己的话来解释它"。首先,以下是下面解释中提到的一些示例列表:
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']
依次比较每个指数的项目对。因此,将a
与b
进行比较会导致1
与1
进行比较,2
与2
进行比较,3
与10
进行比较。
达到。
例如,在比较a
和b
时,比较3
和10
时将停止比较。在比较b
和c
时,比较将在10
和3
进行比较时停止。
一旦找到不相等的对,总体结果就是比较不相等的项目的结果。无论列表长度是否相同,这都适用 - 例如,列表b
大于列表c
,因为100
中的c
永远不会发挥作用。< / p>
例如,在将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'
进行比较将失败。但请注意,可以比较d
和e
列表,因为'a'
中的e
永远不会与d
中的任何内容进行比较。