使用 bisect 组合两个列表中的数字
Using bisect to combine numbers in two lists
在下面两个列表中
l1 = [10, 33, 50, 67]
l2 = [7, 16, 29, 55]
目标是将最接近的数字合并到一个dict中,一旦到达第二个列表中的最后一项,合并就必须停止,所以在这种情况下,如果第一个列表中有未合并的项目,这些items 将不被考虑,所以上面列表的输出将是
10 -> 7
33 -> 29
50 -> 55
67 ->--- # in this case because the last n. in the first list(55) is identified, so the n.67 will be zero
此代码给出以下输出
for s in l1:
ind = bisect(l2, s, hi=len(l2) - 1)
ind -= abs(l2[ind-1] - s) < l2[ind] - s
print("{} -> {}".format(s, l2[ind]))
输出
10 -> 7
33 -> 29
50 -> 55
67 -> 55 ### here is the error, so here will be: 67 -> --, because, 55 is identified in the previous items.
声明
if ind == len(l2) - 1:
break
给出这个输出
10 -> 7
33 -> 29
有人可以帮忙吗?
如果您只需要在达到 l2
的最后一个索引时终止循环,那么在满足该条件时只需使用 break
:
for s in l1:
ind = bisect(l2, s, hi=len(l2) - 1)
ind -= abs(l2[ind-1] - s) < l2[ind] - s
print("{} -> {}".format(s, l2[ind]))
if ind == len(l2) - 1: break
这会生成您希望用于示例输入的输出:
>>> for s in l1:
... ind = bisect(l2, s, hi=len(l2) - 1)
... ind -= abs(l2[ind-1] - s) < l2[ind] - s
... print("{} -> {}".format(s, l2[ind]))
... if ind == len(l2) - 1: break
...
10 -> 7
33 -> 29
50 -> 55
在下面两个列表中
l1 = [10, 33, 50, 67]
l2 = [7, 16, 29, 55]
目标是将最接近的数字合并到一个dict中,一旦到达第二个列表中的最后一项,合并就必须停止,所以在这种情况下,如果第一个列表中有未合并的项目,这些items 将不被考虑,所以上面列表的输出将是
10 -> 7
33 -> 29
50 -> 55
67 ->--- # in this case because the last n. in the first list(55) is identified, so the n.67 will be zero
此代码给出以下输出
for s in l1:
ind = bisect(l2, s, hi=len(l2) - 1)
ind -= abs(l2[ind-1] - s) < l2[ind] - s
print("{} -> {}".format(s, l2[ind]))
输出
10 -> 7
33 -> 29
50 -> 55
67 -> 55 ### here is the error, so here will be: 67 -> --, because, 55 is identified in the previous items.
声明
if ind == len(l2) - 1:
break
给出这个输出
10 -> 7
33 -> 29
有人可以帮忙吗?
如果您只需要在达到 l2
的最后一个索引时终止循环,那么在满足该条件时只需使用 break
:
for s in l1:
ind = bisect(l2, s, hi=len(l2) - 1)
ind -= abs(l2[ind-1] - s) < l2[ind] - s
print("{} -> {}".format(s, l2[ind]))
if ind == len(l2) - 1: break
这会生成您希望用于示例输入的输出:
>>> for s in l1:
... ind = bisect(l2, s, hi=len(l2) - 1)
... ind -= abs(l2[ind-1] - s) < l2[ind] - s
... print("{} -> {}".format(s, l2[ind]))
... if ind == len(l2) - 1: break
...
10 -> 7
33 -> 29
50 -> 55