首页 > 解决方案 > 使用更大运算符在两个列表之间进行 Python 比较

问题描述

谁能帮我解释为什么第一个和第二个返回不同的结果?我认为第二个也应该返回 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

标签: pythonlist

解决方案


详细答案:

指示的命令返回在列表 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。


推荐阅读