Python Bisection for list of list



如果我有以下代码…

from bisect import bisect_right
a = [[0, 0], [3, 5], [3,9]]
print(bisect_right(a, [3]))
b = [0, 3, 3]
print(bisect_right(b, 3))

得到以下输出

1
3

这与我所期望的相反。据我所知,Python应该使用a中每个列表的第一个元素来确定顺序。然后,根据文档,第一个输出应该是3而不是1,因为

返回的插入点i将数组a分成两部分,左侧为all(val <= x for val in a[lo:i]),左侧为all(val>在a[i:hi])中,X表示val,

第二种情况似乎是正确的。为什么在第一种情况下打印1?

提前感谢。

列表中的第一个元素并不是排序的唯一因素。当第一个元素相等时,也比较下一个元素。因为[3]没有第二个元素,所以它被认为是较小的。

[3] < [3, 5]
# True
[3, 5] < [3, 9]
# True
[3, 9] < [3, 5]
# False

Python对序列使用字典顺序排序。可以把列表元素想象成字符串中的字符。如果我问你

的结果
bisect_right(['a', 'ba', 'bb'], 'b')

你会马上告诉我1,而不是3。显然'b' <"ba"。同样的事情也适用于列表,无论是['b'] < ['b', 'a']还是[3] < [3, 5]

最新更新