Python 平分值 x 是一个长度为 1 的数组
Python bisect with value x is an array of length 1
我正在尝试理解这段代码:
i = bisect.bisect(self.A, [id + 1]) - 1
这里,开发者在bisect()
中传递了[id + 1]
作为x
(目标值)。在 Python docs and its source code for bisect 中,我没有看到任何地方提到 x
可以是长度为 1 的数组。
代码的目标是在 A
中找到具有 id
或 A
中最大 id 的元组的值。例如:
A = [[0, 0], [2, 4]]
id = 1
Output = 0 // Here: 1 isn't in A so return value 0 from id 0 which is the biggest id < input id
A = [[0, 0], [2, 4], [3, 12]]
id = 3
Output = 12 // 3 is in A so return 12
我尝试取出 ids
来尝试找到值,但我的代码 return 的答案是错误的:
A = [[0, 0], [2, 4]]
id = 1
ids = [0, 2]
i = bisect.bisect(ids, id) // return 1 which is correct for bisect but not the expected result
i = bisect.bisect(ids, id + 1) - 1 // still returns 1
i = bisect.bisect_left(ids, id + 1) - 1 // still returns 1
i = bisect.bisect_left(ids, id + 1) - 1 // returns 0
但是,bisect_left()
将 return 给出错误答案:
A = [[0, 0], [2, 4], [3, 12]]
id = 3
i = bisect.bisect(self.A, [id + 1]) - 1 // returns 12 which is correct
ids = [0, 2, 3]
i = bisect.bisect_left(ids, id + 1) - 1 // returns 4
那么为什么会有差异呢?传递 [x]
如何运作?
以 list
作为参数二等分没有特殊情况。 list
s 可以像其他任何东西一样进行比较,并且比较是在元素上按字典顺序进行的。因此,如果您在 int
的双元素 list
的 list
中搜索 [id + 1]
,您将找到内部 list
具有 id+1
作为第一个元素。通过比双元素 list
s 短,它总是比第一个元素相同的任何东西都短,所以 bisect_left
将给出相对于相等元素的一致位置,总是在 运行 的相等元素(而如果你通过了 [id + 1, 0]
,你会在第二个 int
为负的任何元素之后)。
我正在尝试理解这段代码:
i = bisect.bisect(self.A, [id + 1]) - 1
这里,开发者在bisect()
中传递了[id + 1]
作为x
(目标值)。在 Python docs and its source code for bisect 中,我没有看到任何地方提到 x
可以是长度为 1 的数组。
代码的目标是在 A
中找到具有 id
或 A
中最大 id 的元组的值。例如:
A = [[0, 0], [2, 4]]
id = 1
Output = 0 // Here: 1 isn't in A so return value 0 from id 0 which is the biggest id < input id
A = [[0, 0], [2, 4], [3, 12]]
id = 3
Output = 12 // 3 is in A so return 12
我尝试取出 ids
来尝试找到值,但我的代码 return 的答案是错误的:
A = [[0, 0], [2, 4]]
id = 1
ids = [0, 2]
i = bisect.bisect(ids, id) // return 1 which is correct for bisect but not the expected result
i = bisect.bisect(ids, id + 1) - 1 // still returns 1
i = bisect.bisect_left(ids, id + 1) - 1 // still returns 1
i = bisect.bisect_left(ids, id + 1) - 1 // returns 0
但是,bisect_left()
将 return 给出错误答案:
A = [[0, 0], [2, 4], [3, 12]]
id = 3
i = bisect.bisect(self.A, [id + 1]) - 1 // returns 12 which is correct
ids = [0, 2, 3]
i = bisect.bisect_left(ids, id + 1) - 1 // returns 4
那么为什么会有差异呢?传递 [x]
如何运作?
以 list
作为参数二等分没有特殊情况。 list
s 可以像其他任何东西一样进行比较,并且比较是在元素上按字典顺序进行的。因此,如果您在 int
的双元素 list
的 list
中搜索 [id + 1]
,您将找到内部 list
具有 id+1
作为第一个元素。通过比双元素 list
s 短,它总是比第一个元素相同的任何东西都短,所以 bisect_left
将给出相对于相等元素的一致位置,总是在 运行 的相等元素(而如果你通过了 [id + 1, 0]
,你会在第二个 int
为负的任何元素之后)。