python - 如何使用两个过滤器对两个数据字段的列表进行排序

假设我有两个 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)]

相似文章

jquery - Jquery 组插件

假设我有一个段落列表:第1段第2段第3段第4段第5段第6段第7段第8段第9段是否有一个jquery插件允许通过拖动在框(div容器)中对段落进行分组?应保留顺序。就像是<divid="group1">...

scala - 多个列表的组合 (Scala)

我正在尝试编写一个函数,该函数将多个列表作为输入并返回这些列表之间每个组合的字符串表示形式。样本输入:valintegers=List(1,2,3,4)valcharacters=List('a','...

c - c 程序处理 multithreading

我的c程序需要帮助,我已经完成了大部分,但还有一些问题。该计划是关于**探索进程和线程之间的同步。**在一个程序中给定了三(3)个流程,这些流程协同工作以解决生产者消费者问题:2个过程是“生产者”,每...

随机推荐

最新文章