使用大于或小于运算符比较两个列表

时间:2012-10-24 15:51:56

标签: python list

我注意到最近直接比较了两个整数列表的代码:

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究竟在做什么?似乎它返回结果有利于第一个列表,其中最左边的元素大于相应的?

2 个答案:

答案 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']

依次比较每个指数的项目对。因此,将ab进行比较会导致11进行比较,22进行比较,310进行比较。

达到。

例如,在比较ab时,比较310时将停止比较。在比较bc时,比较将在103进行比较时停止。

一旦找到不相等的对,总体结果就是比较不相等的项目的结果。无论列表长度是否相同,这都适用 - 例如,列表b大于列表c,因为100中的c永远不会发挥作用。< / p>

例如,在将ab进行比较时,总体结果将是将310进行比较的结果。 a < b -> True,因为3小于10a > b -> False,因为3不大于10a == b -> False因为3不等于10

如果其中一个列表较短且其N个项目等于较长列表的前N个项目,则与ac一样,较短的列表将被视为小于较长的列表列表(因此a小于c)。

如果两个列表的长度相同,并且所有项目对相等,则两个列表将仅作为 进行比较。

关于类型的注意事项:如果一对中的项目不具有可比性,则比较将像往常一样TypeError失败。例如,当af进行比较时,将列表1'a'进行比较将失败。但请注意,可以比较de列表,因为'a'中的e永远不会与d中的任何内容进行比较。