假设我有两个 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]]
这有没有可能?我应该搜索什么样的数据结构?
回答1
使用 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)]