gpt4 book ai didi

python - 在python中对并行列表进行排序 - 第一项降序,第二项升序

转载 作者:行者123 更新时间:2023-12-01 03:39:12 24 4
gpt4 key购买 nike

我有两个列表 - 第一个用于团队名称,第二个用于积分

我想根据分数对它们进行排序,同时又不丢失相应团队的踪迹。我在 SO 上发现了一些非常适合这样做的东西 - 它按降序(从多到少)对团队进行排序。

第二个列表中似乎没有排序。

EDIT - Original Data

Teams       Pts
D Clark 0
D Dupuis 2
T Leach 2
J Schutz 0
C Hearder 2
R Pagani 0
M Cameron 2
B Hunter 0

这就是我正在使用的:

pts, teams = zip(*sorted(zip(pts, teams), reverse=True))
i = 1
for team, num_pts in zip(teams, pts):
standings = str(i) + '. ' + team + " (" + num_pts + ")"
print standings
i += 1

结果如下:

1. T Leach (2)
2. M Cameron (2)
3. D Dupuis (2)
4. C Hearder (2)
5. R Pagani (0)
6. J Schutz (0)
7. D Clark (0)
8. B Hunter (0)

我想做的是对团队名称添加额外的排序 - 所以如果有平局,那么它将按名称升序排序,

像这样:

1. C Hearder (2)
2. D Dupuis (2)
3. M Cameron (2)
4. T Leach (2)
5. B Hunter (0)
6. D Clark (0)
7. J Schutz (0)
8. R Pagani (0)

最佳答案

这里有两个选择。您可以使用 cmpkey 作为 sorted 的参数。

使用cmp,您可以定义一个带有两个参数的函数,并对两个值进行比较。如果第一个参数小于第二个参数,则返回负数。如果大于第二个,则返回正数。如果相等,则返回 0。

使用 cmp 的第一个示例:

pts = ['2', '2', '2', '2', '2', '0', '0', '0', '0']
teams = ['T Leach', 'M Cameron', 'D Dupuis', 'C Hearder', 'R Pagani',
'J Schutz', 'D Clark', 'B Hunter']

def custom_cmp(x,y):
return cmp(x[0], y[0]) or cmp(y[1], x[1])

pts, teams = zip(*sorted(zip(pts, teams), cmp=custom_cmp, reverse=True))

如果 python or 运算符的计算结果为 True(而不是如上所述的 0),则它会返回左侧,否则它将返回返回右侧。因此,如果点不相等,则此 custom_cmp 返回从 xy 的点的比较。否则,它会比较从 yx 的团队(相反的顺序)。

使用 key 另一方面,您只需考虑如何单独查看一个元素,以便 python 自然地理解如何按照您想要的方式对其进行排序。我们知道第一个项目正在正确比较,所以现在我们只需要翻转第二个项目。数字很​​容易,我们可以取负数。但是如何翻转一根弦呢?

一种方法是获取字符串中每个字符的 ord(它应该是字符串的 ascii 值整数)。然后,您可以取这些值的负数并将它们打包到元组中。其中之一如下所示:

>>> tuple(-ord(c) for c in 'C Hearder')
(-67, -32, -72, -101, -97, -114, -100, -101, -114)

使用key的第二个示例:

def custom_key(pair):
pts, team = pair
return (pts, tuple(-ord(c) for c in team))

pts, teams = zip(*sorted(zip(pts, teams), key=custom_key, reverse=True))

追溯编辑:

如果我们定义一个自定义key,我们也可以反转key本身并删除reverse参数:

def custom_key(pair):
pts, team = pair
return (-int(pts), team)

pts, teams = zip(*sorted(zip(pts, teams), key=custom_key))

关于python - 在python中对并行列表进行排序 - 第一项降序,第二项升序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39939813/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com