gpt4 book ai didi

python - 使用 bisect 组合具有距离条件的项目

转载 作者:行者123 更新时间:2023-11-28 16:30:09 26 4
gpt4 key购买 nike

在下面两个列表中

 l1 = [10, 33, 50, 67]
l2 = [7, 16, 29, 65]

我使用 bisect 将两个列表中最接近的数字组合起来。我用这个代码

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 -> 65
67 -> 65

为了摆脱第二个列表中的重复项目,我在打印后使用了这个:

    if ind == len(l2) - 1: break  

但是在 if 语句的情况下,输出是:

10 -> 7
33 -> 29
50 -> 65

我在这里想要的是,组合将在最接近的数字之间的距离不大于 6 的条件下完成,但不会中断未通过此测试的项目的循环,就像我上一个代码的情况一样.我想要这个输出:

10 -> 7
33 -> 29
50 -> -- # here for the condition
67 -> 65

最佳答案

因为我们已经平分了,所以我们知道哪些元素更大,所以我们可以在减去之后测试:

from bisect import bisect
for s in l1:
ind = bisect(l2, s, hi=len(l2) - 1)
ind -= s - l2[ind-1] < l2[ind] - s
tmp = l2[ind]
print("{} -> {}".format(s,tmp if tmp - s < 6 else "NULL"))

使用您的 original question 中的代码:

with open("test.txt") as f:
r = re.compile("(\d+)")
for line in f:
a, b = line.lstrip("0123456789. ").split(">> ")
a_keys = [int(i.group()) for i in r.finditer(a)]
b_keys = [int(i.group()) for i in r.finditer(b)]
a = a.strip("()\n").split(",")
b = b.strip("()\n").split(",")
for ele, k in zip(a, a_keys):
ind = bisect(b_keys, k, hi=len(b) - 1)
ind -= k - b_keys[ind] < b_keys[ind-1] - k
print("{} -> {}".format(ele, b[ind] if abs(b_keys[ind] - k) < 5 else "NULL"))

输入:

1. (2- human rights, 10- workers rights)>> (3- droits de l'homme, 7- droit des travailleurs)
2. (2- human rights, 10- workers rights, 19- women rights)>> (1- droits de l'homme ,4- foobar, 15- les droits des femmes)

输出:

2- human rights -> 3- droits de l'homme
10- workers rights -> 7- droit des travailleurs
2- human rights -> 1- droits de l'homme
10- workers rights -> NULL
19- women rights -> 15- les droits des femmes

如果 b_keys[ind] 是最接近的值 + n 小于 k 我们有一个匹配项,否则我们输出 null。

关于python - 使用 bisect 组合具有距离条件的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32787554/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com