没有完成,但应该让你开始:
from bisect import bisect
import re
with open("test.txt") as f:
r = re.compile("(\d+)")
for line in f:
a, b = line.lstrip(". ").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, s in zip(a, a_keys):
ind = bisect(b_keys, s, hi=len(b) - 1)
print("{} -> {}".format(ele, b[ind]))
输出:
2- human rights -> 3- droits de l'homme
10- workers rights -> 7- droit des travailleurs
2- human rights -> 5- droits de l'homme
10- workers rights -> 15- les droits des femmes
19- women rights -> 15- les droits des femmes
你需要修复的格式和做一个检查基础上的绝对差值找到分钟ind和ind的电子元件-1。
要赶在前面的IND-1元的绝对型差分少:
from bisect import bisect
import re
with open("test.txt") as f:
r = re.compile("(\d+)")
for line in f:
a, b = line.lstrip(". ").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]))
所以对:
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 -> 4- foobar
,因为我们没有考虑前一个元素的绝对差异在哪里较少。
使用您的评论的数据显示差异:
l1 = [10, 33, 50, 67]
l2 = [7, 16, 29, 55]
for s in l1:
ind = bisect(l2, s, hi=len(l2) - 1)
print("{} -> {}".format(s, l2[ind]))
输出:
10 -> 16
33 -> 55
50 -> 55
67 -> 55
现在与检查前一个元素:
l1 = [10, 33, 50, 67]
l2 = [7, 16, 29, 55]
for s in l1:
ind = bisect(l2, s, hi=len(l2) - 1)
ind -= s - l2[ind-1] < l2[ind] - s
print("{} -> {}".format(s, l2[ind]))
输出:
10 -> 7
33 -> 29
50 -> 55
67 -> 55
bisect.bisect
)类似于bisect_left(,但返回其自带后(到右侧)是一个x的任何现有条目的插入点。 返回的插入点i将数组a分成两半,以便左侧的所有(val < = x for [lo:i]中的val)和all [val> x for val [a:hi] )为右侧。
因此,平分得到的元素应该在您的有序数字列表中的位置,所有元素都位于元素左侧,这意味着元素大于以前的所有元素。为了找到最接近的差异,我们需要检查前一个元素,因为绝对差异可能会更小。
你可以揭露你到目前为止所尝试过的吗? – Cyrbil
请在最后2段中格式化您的代码片段。 –