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

Tim*_*ony 25 python list

我注意到最近一段代码直接比较了两个整数列表,如下所示:

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

gef*_*fei 37

从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)

依次比较每个索引处的项目对。因此,比较ab将导致1被比较12被比较23被比较10

当对比较将停止或者不相等的一对物品的被发现--IF列表具有不同的长度-在达到短列表的末尾。

例如,当比较ab,比较会当停止3,并10进行比较。当比较bc,比较将停止时103进行比较。

一旦找到不相等的对,整体结果就是比较不相等项的结果。无论列表的长度是否相同,这都适用——例如,列表b大于列表,c因为100inc永远不会起作用。

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

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

当两个列表的长度相同并且所有项目对比较相等时,它们才会相等。

关于类型的注意事项:如果一对中的项目不可比较,则比较将TypeError像往常一样失败。例如,比较列表af时将无法1进行比较'a'。但还要注意,listsde可以进行比较,因为'a'ine永远不会与 in 中的任何内容进行比较d

  • 这种情况经常发生在堆栈溢出的情况下,一个好问题和两个答案,一个非常复杂,只有知道答案的人才能理解,另一个过于复杂,作为“简单”答案出售。专业提示查看 __ge__ 定义下列表对象的源代码。如果项目相同,则具有较大项目的列表总是较大,则长度优先;如果列表相同但顺序不同,则具有第一个较大项目的列表更大。 (2认同)