Python两个列表之间的比较使用greater操作符



谁能帮我解释一下为什么第一个和第二个返回不同的结果?我认为第二个也应该返回2。

In [15]: bisect.bisect([0,3], 3)
Out[15]: 2
In [16]: bisect.bisect([[0, 0], [3, 50]], [3])
Out[16]: 1

裁判:https://docs.python.org/3/tutorial/datastructures.html comparing-sequences-and-other-types

详细答案:

指定的命令返回在列表a中插入项x的索引,并保持顺序,假设a已排序。

为了计算这个位置,执行一个二进查找,并且在每次迭代中比较列表中的值和要插入的值。

我注意到的第一个区别是,在第一个示例中,您提供了一个数字列表和一个要输入的数值。在第二种情况下,它是一个列表的列表,以及一个要插入的列表。

这会影响比较的结果,特别是在将给定值与列表的索引1进行比较时。

对于数字列表,我们有[0,3]和3,所以对索引1的比较是:3 <3,返回False。

对于列表的列表,我们有[[0,0],[3,50]]和[3],索引1中的比较是[3]<[3, 50]。

比较列表遵循一种稍微不同的方法,遵循字典顺序,如https://docs.python.org/3/tutorial/datastructures.html#comparing-sequences-and-other-types所示。

在[3]的情况下,它是[3,50]的子序列,因此比较[3]的结果<[3,50]返回True。

从您链接的文档:

如果一个序列是另一个序列的初始子序列,则较短的序列是较小(较小)的序列。

这基本上与字典排序单词的方式相同(是一本书,而不是Pythondict)。在其他条件相同的情况下,较短的序列被认为小于较长的序列。因此,[3][3, 50]之前。

最新更新