沒有完成,但應該讓你開始:
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段中格式化您的代碼片段。 –