关于#python#的问题,如何解决?

s = "德国 10 11 16\n意大利 10 10 20\n荷兰 10 12 14\n法国 10 12 11\n英国 22 21 22\n中国 38 32 18\n日本 27 14 17\n美国 39 41 33\n俄罗斯奥委会 20 28 23\n澳大利亚 17 7 22\n匈牙利 6 7 7\n加拿大 7 6 11\n古巴 7 3 5\n巴西 7 6 8\n新西兰 7 6 7"
数据里面包含了15个国家的金、银、铜数据,对奖牌榜进行排序(先生成一个列表,再对列表元素进行排序)。

应该是先按金牌数排序,金牌数相同再按银牌数排序,银牌数相同再按铜牌数排序

你题目的解答代码如下:

s = "德国 10 11 16\n意大利 10 10 20\n荷兰 10 12 14\n法国 10 12 11\n英国 22 21 22\n中国 38 32 18\n日本 27 14 17\n美国 39 41 33\n俄罗斯奥委会 20 28 23\n澳大利亚 17 7 22\n匈牙利 6 7 7\n加拿大 7 6 11\n古巴 7 3 5\n巴西 7 6 8\n新西兰 7 6 7"
li=s.split('\n')
li.sort(key=lambda x:[int(v) for v in x.split(' ')[1:]] ,reverse=True)
for v in li:
    print(v)

img

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

按奖牌总数排序,参考代码

s = "德国 10 11 16\n意大利 10 10 20\n荷兰 10 12 14\n法国 10 12 11\n英国 22 21 22\n中国 38 32 18\n日本 27 14 17\n美国 39 41 33\n俄罗斯奥委会 20 28 23\n澳大利亚 17 7 22\n匈牙利 6 7 7\n加拿大 7 6 11\n古巴 7 3 5\n巴西 7 6 8\n新西兰 7 6 7"
a=s.split('\n')
res=sorted(a,key=lambda x:sum(map(int,x.split(' ')[1:])),reverse=True)
print(res)

如有帮助,请点采纳

代码如下

s = "德国 10 11 16\n意大利 10 10 20\n荷兰 10 12 14\n法国 10 12 11\n英国 22 21 22\n中国 38 32 18\n日本 27 14 17\n美国 39 41 33\n俄罗斯奥委会 20 28 23\n澳大利亚 17 7 22\n匈牙利 6 7 7\n加拿大 7 6 11\n古巴 7 3 5\n巴西 7 6 8\n新西兰 7 6 7"
list = s.split("\n")
scopes = []
for item in list:
    scopes.append(item.split(" "))
scopes.sort(key=lambda scopes: int(scopes[3]), reverse=True)
scopes.sort(key=lambda scopes:int(scopes[2]),reverse=True)
scopes.sort(key=lambda scopes:int(scopes[1]),reverse=True)
print(scopes)

如果对你有帮助,望采纳

以金牌银牌铜牌这样排序楼上那位已经给出答案了,可以优化下就是直接一行代码表示按照多列排序

scopes_list = sorted(scopes, key=(lambda x: [int(x[1]), int(x[2]), int(x[3])]),reverse=True)

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632