在两个首选项列表中查找最佳匹配项

2024-10-02 22:31:00 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑到咖啡馆的优先顺序,为两个朋友找到最合适的。你知道吗

  • 朋友1-[1,2,3]
  • 朋友2-[3,1,4]

其中1->;cafe1、2->;cafe2等

我试着在匹配的索引中找出最小的差异。但它在[1,2,3][2,4,3]上失败

def find_match(f1,f2):

    difference=len(f1)

    for i in range(len(f1)):
        for j in range(len(f2)):
            if f1[i]==f2[j]:
                curr_diff=abs(i-j)
                if curr_diff<difference:
                    difference=curr_diff
                    print(f1[i])
                    return

为了

 Friend1 - [1 ,2 ,3] 
 Friend2 - [3 ,1 ,4]

输出应为1

对于[1,2,3],[2,4,3]输出应为2


Tags: ingtforlenif顺序朋友diff
3条回答

不清楚这是否是您要查找的内容,而且i + 1看起来很奇怪,但它返回了符合您的规范的正确结果

def best_cafe(l1, l2):
    match = []
    for i, item in enumerate(l1):
        if item not in l2:
            continue
        match.append(i + 1)

    return min(match)


l3 = [1, 2, 3]
l4 = [3, 1, 4]

l1 = [1, 2, 3]
l2 = [2, 4, 3]

print best_cafe(l3, l4)
print best_cafe(l1, l2)

一个班轮怎么样?你知道吗

f1 = [1, 2, 3] 
f2 = [3, 1, 4]

best = min(((i1 + 1) * (i2 + 1), v1) for i1, v1 in enumerate(f1) for i2, v2 in enumerate(f2) if v1 == v2)[1]

你应该把每一家咖啡馆的订单当作“重量”。这在字典里很容易处理。你知道吗

friend1 = ["A","B","C"]
friend2 = ["C","A","D"]
votes = dict()
friends = [friend1,friend2]
for preferences in friends:
    for weigth,cafe in enumerate(preferences):
        votes[cafe] = votes.get(cafe,0) + weigth
_,bestCafe = min((v,k) for k,v in votes.items())
print(bestCafe) # A

注意我在咖啡馆里用字母来避免和索引混淆。最低重量对应首选咖啡馆

相关问题 更多 >