2015-06-21 19 views
5

在使用不等式运算符比较列表时,无法理解Python的行为。下面是使用python3命令行解释器的代码段:Python不等式操作符;比较列表

>>> [8] < [7] 
False 
>>> [8] < [9] 
True 
>>> [8, 6] < [9] 
True 
>>> [8, 6] < [9, 7]  
True     # So far so good 
>>> [8, 6] < [9, 5]  
True     # Huh? 

因此,很明显的Python不仅仅是通过并行索引移动。我确实发现了一些信息,说明在这种情况下,Python会按照字典顺序排列列表,我认为这是按字母顺序排列的。

所以,我想,也许名单得到排序,然后通过平行比较,但这是通过下面的例子证伪:

>>> [1, 2, 3] < [3, 2, 1] 
True 

我的猜测是,内部比较会[1,2,3 ] < [1,2,3],应该返回False,因为1 < 1是False,2 < 2是False等。

任何帮助表示赞赏。

+0

在字母列表 '86'< '95',是吗?通用:比较序列,左边的元素是“最重要的”。列表只是另一个序列。 –

回答

1

它实际上很有意义。

的比较做了类似的,你会排序的话,在字典顺序。毕竟,单词也是列表:字符列表。

你首先要考虑的第一个项目。如果一个较小,整个序列是较小的,如果他们是平等的,你移动到第二个项目,等

显然,“86”在“95”之前,就如同“AZ”来“BC”之前“100”在“90”之前。

更多here

3

显然Python是不只是通过并行索引

是的,它是移动,并停止在第一时间发现不相等的比较值。这确实是字典顺序。用字母替换示例中的数字,用字符串替换列表中的数字:

"h" < "g" # False 
"h" < "i" # True 
"hf" < "i" # True 
"hf" < "ig" # True 
"hf" < "ie" # True - not huh, hf does come before ie alphabetically. 
"abc" < "cba" # True 
4

什么Python不就是刚刚越过平行名单,并比较同一指数的元素。第一次遇到不相等的元素时,它返回这个结果。

这是相同的,因为比较的话:

"Peter" > "Peer" 

前两个字母是相同的,第三个是不同的,并且是给的结果。这是(对于列表)与纸质词典中使用的相同技术,只是使用列表元素而不是字符。

附加信息: (正如Padraic Cunningham所建议的):当一个列表更短且所有元素的长度与较短列表的大小相同时,较长的列表被认为更大。这也与正常(纸)字典中的相同。

+1

或者,如果所有元素都是平等的了较短列表的长度 –

+0

由于较长的名单被认为是较大的,添加了此信息 – Juergen