3 回答

TA贡献1871条经验 获得超13个赞
这个问题有两个方面:
要按每个子列表值排序,请
sorted
与自定义函数一起使用。要在单独的行上打印,可以使用
for
循环。
这是一个例子:
students = [['Harry', 37.21], ['Berry', 37.21], ['Tina', 37.2],
['Akriti', 41], ['Harsh', 39]]
for name, val in sorted(students, key=lambda x: (x[1], x[0])):
print(name, val)
Tina 37.2
Berry 37.21
Harry 37.21
Harsh 39
Akriti 41
如果您希望得分按从高到低的顺序排列,并且让平局者按字母顺序排列名称,则可以使用sorted(students, key=lambda x: (-x[1], x[0])。

TA贡献1785条经验 获得超8个赞
您可以使用下面的代码片段以预期的格式生成输出。
import operator
students = [['Harry', 37.21], ['Berry', 37.21], ['Tina', 37.2], ['Akriti', 41], ['Harsh', 39]]
students_sorted = sorted(students, key=operator.itemgetter(1,0))
print('\n'.join(' '.join(map(str,sl)) for sl in students_sorted))

TA贡献1810条经验 获得超4个赞
您可以迭代列表列表,students然后组合一个字典来打印值。
print_dict = {}
for name, score in students:
if score in print_dict:
print_dict[score] += [name]
else:
print_dict[score] = [name]
一旦有了要打印的值字典,就可以通过迭代和排序进行打印:
for score, names in print_dict.items():
print score, ', '.join(sorted(names))
Out:
41 Akriti
37.2 Tina
37.21 Berry,Harry
39 Harsh
添加回答
举报