如何使用两个过滤器对两个数据字段的列表进行排序
How to sort lists of two data fields using two filters
假设我有两个 K 人的身高和年龄列表。
例如,
height = [180, 190, 185, 150, 180, 185]
age = [23, 28, 29, 30, 40, 20]
第一个人23岁,身高180cm,第二个人28岁,身高190cm,以此类推
我想将这两个列表先按身高顺序排序,然后再按年龄排序,如下:
result = [[150,30], [180,23], [180,40], [185,20], [185,29], [190,28]]
有可能吗?我应该搜索什么样的数据结构?
使用zip
配对数据然后简单地sorted
height = [180, 190, 185, 150, 180, 185]
age = [23, 28, 29, 30, 40, 20]
result = sorted(zip(height, age))
# [(150, 30), (180, 23), (180, 40), (185, 20), (185, 29), (190, 28)]
默认情况下,sorted
按第一项排序(当项目可迭代时),然后在碰撞时按第二项排序,依此类推,这正是您所需要的
所以你知道,这就是你的做法:按身高排序,然后按年龄排序
result = sorted(zip(height, age), key=lambda x: (x[0], -x[1]))
print(result) # [(150, 30), (180, 40), (180, 23), (185, 29), (185, 20), (190, 28)]
假设我有两个 K 人的身高和年龄列表。
例如,
height = [180, 190, 185, 150, 180, 185]
age = [23, 28, 29, 30, 40, 20]
第一个人23岁,身高180cm,第二个人28岁,身高190cm,以此类推
我想将这两个列表先按身高顺序排序,然后再按年龄排序,如下:
result = [[150,30], [180,23], [180,40], [185,20], [185,29], [190,28]]
有可能吗?我应该搜索什么样的数据结构?
使用zip
配对数据然后简单地sorted
height = [180, 190, 185, 150, 180, 185]
age = [23, 28, 29, 30, 40, 20]
result = sorted(zip(height, age))
# [(150, 30), (180, 23), (180, 40), (185, 20), (185, 29), (190, 28)]
默认情况下,sorted
按第一项排序(当项目可迭代时),然后在碰撞时按第二项排序,依此类推,这正是您所需要的
所以你知道,这就是你的做法:按身高排序,然后按年龄排序
result = sorted(zip(height, age), key=lambda x: (x[0], -x[1]))
print(result) # [(150, 30), (180, 40), (180, 23), (185, 29), (185, 20), (190, 28)]