我在组合不同的列表时遇到了麻烦 我正在尝试获取名单和分数列表,同时将前n名学生的分数与显示的名称进行比较。
我也不确定将返回功能放在哪里
答案 0 :(得分:2)
我假设你有一些看起来像这样的数据:
names = ['Alice', 'Bob', "Charlie", "David", "Eve"]
scores = [1, 2, 3, 4, 5]
并且您尝试获得最高n
(为了便于使用,我们将使用n=2
)名称,按分数排序。有很多方法可以做到这一点,最简单的方法是使用字典。我们希望最终得到:
name_score_dict = {"Alice": 1,
"Bob": 2,
"Charlie": 3,
"David": 4,
"Eve": 5}
我们可以通过几种不同的方式做到这一点,但zip
无论如何都至关重要。最容易理解的可能是使用字典理解。
name_score_dict = {name:score for name,score in zip(names, scores)}
更紧凑,但可能更难理解,正在使用dict
构造函数
name_score_dict = dict(zip(names, scores))
现在你所要做的就是让字典处于某种排序状态。 Stack Overflow上有关于如何对字典进行排序的大量不同问题,I will leave you to read了解我为什么做的事情有道理,但是:
sorted_d = sorted(name_score_dict.items(), key=lambda kv: kv[1], reverse=True)
这应该给你类似的东西:
[("Eve", 5), ("David", 4), ("Charlie", 3), ("Bob", 2), ("Alice", 1)]
因此,切掉第一个n
项以获取name, score
元组。
for name,score in sorted_d[:n]:
print("Name is {} and score is {}".format(name, score))
(这也使用string formatting,这值得自学)