python 实现复合字段排序,如 :身高一样比体重,如何实现呢?

Posted shiter

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 实现复合字段排序,如 :身高一样比体重,如何实现呢?相关的知识,希望对你有一定的参考价值。

文章大纲


假设有一个题目:

现在学校排队
按照身高升序排列,身高相同按照体重降序(升序)排列,身高体重都相同,按照原有先后顺序排列

样例输入:

shengao = [150,150,160,160,170]
tizhong = [100,100,100,105,100]

输出:(体重升序)

index = [1,2,3,4,5]

纯算法思路

if __name__ == '__main__':
    index = range(0,len(shengao))
    liebiao = zip(index,shengao,tizhong)
    bmi = list(liebiao)
    bmi.sort(key=lambda x: (x[1], x[2]))

    print(bmi)

输出


[(0, 150, 100), (1, 150, 100), (2, 160, 100), (3, 160, 105), (4, 170, 100)]

这样的思路有一个问题,无法实现,复核字段排序的负责逻辑


面向对象思路

java ,c++ 都有Compare接口, 主要就是实现比较的接口

比如c++ 类似代码:

//对人的年龄进行升序排列,年龄相同对身高进行降序排列,年龄身高相同对体重升序排列
#include <iostream>
#include <list>
#include <string>

using namespace std;


class Person

public:
	Person( string Name, int Age,int Heigh,int weight)
	
		this->m_Name = Name;
		this->m_Age = Age;
		this->m_Heigh = Heigh;
		this->m_weight = weight;
	
	string m_Name;
	int m_Age;
	int m_Heigh;
	int m_weight;
;

bool Compare(Person& p1, Person& p2)

	if (p1.m_Age == p2.m_Age)
	
		if (p1.m_Heigh == p2.m_Heigh)
		
			return p1.m_weight < p2.m_weight;
		
		else
		
			return p1.m_Heigh > p2.m_Heigh;
		
	
	else
	
		return p1.m_Age < p2.m_Age;
	

void test01()

	list<Person> l;
	Person p1 =  "张飞", 23, 170 ,74;
	Person p2 =  "关羽", 23, 170 ,80;
	Person p3 =  "赵云", 23, 180 ,78;
	Person p4 =  "刘备", 25, 199 ,90;
	
	l.push_back(p1);
	l.push_back(p2);
	l.push_back(p3);
	l.push_back(p4);

	cout << "-----------------------" << endl;
	for (list<Person>::iterator i = l.begin(); i != l.end(); i++)
	
		cout << "姓名:" << i->m_Name << " " << "年龄:" << i->m_Age << " " << "身高:" << i->m_Heigh 
			<< "体重:" << i->m_weight <<endl;
	
	cout << "-----------------------" << endl;
	l.sort(Compare);
	for (list<Person>::iterator i = l.begin(); i != l.end(); i++)
	
		cout << "姓名:" << i->m_Name << " " << "年龄:" << i->m_Age << " " << "身高:" << i->m_Heigh 
		<< "体重:" << i->m_weight << endl;
	

int main()

	test01();
	return 0;



参考文献

https://www.runoob.com/python3/python3-att-list-sort.html

以上是关于python 实现复合字段排序,如 :身高一样比体重,如何实现呢?的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB索引问题

华为机试真题 Java 实现身高体重排序

No.48 详细解释VB冒泡排序,具体到每一句代码。

华为OD机试模拟题用 C++ 实现 - 身高排序(2023.Q1)

MongoDB 中的复合索引是不是改进了多重匹配(而不是排序)?

SpringData JPA复合主键