按顺序选择咖啡馆,找到两个朋友的最佳搭配。
其中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
答案 0 :(得分:0)
不清楚这是否是您要的内容,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)
答案 1 :(得分:0)
您应该将订单视为每个咖啡馆的“重量”。这在字典中很容易管理。
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
注意,我在咖啡馆使用字母来避免与索引混淆。最低的重量对应于喜欢的咖啡馆
答案 2 :(得分:0)
单线怎么样?
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]