我刚刚开始使用Python,试图解决这个问题。给定两个列表,我必须打印两个列表中综合排名最小的项目。这是我目前的方法,但似乎是错误的。
rest_1 = ['pizza','potato','tomato','burger']
rest_2 = ['onion','tomato','pizza','tea']
for i in range(1,len(rest_1)):
for j in range(1,len(rest_2)):
if rest_1[i]==rest_2[j]:
print(rest_2[i])
这里,答案应该是Pizza,因为它的综合排名最小。但我的逻辑肯定是错的。希望得到任何帮助。
你可以创建一个dict,将第二个列表中的项目映射到它们各自的指数上,然后遍历第一个列表中的项目,并得到第二个列表中同一项目的对应指数,计算两者的总和,并使用 min
函数来获取其中的最小值。使用无穷大(float('inf')
)作为索引,以防第一个列表中的项目不在第二个列表中,所以它不会被考虑。
def least_ranked(first, second):
mapping = dict(map(reversed, enumerate(second)))
return min((i + mapping.get(v, float('inf')), v) for i, v in enumerate(first))[1]
这样,
least_ranked(rest_1, rest_2)
返回。'pizza'