python多个条件同时成立_Python根据多个条件进行排序

本文介绍了Python如何根据多个条件进行排序,以解决CCFCSP题目的数字排序问题。通过实例解析了纯数值和字符数据的排序,包括使用`sorted`函数结合`key`参数进行排序,以及使用自定义函数实现多条件的升序和降序排列。文章还指出了在处理数据时需要注意的细节,例如处理字符串数据和理解排序优先级。
摘要由CSDN通过智能技术生成

小白一名,最近在做ccfcsp的题目,做到201503-02数字排序,个人认为这个题目就是属于多条件排序,当然题目里面说的也很清楚,先按照次数进行降序,次数相同的话,就按照升序进行排。

在csdn里查找几个关于Python多条件排序,说的好像都没毛病,但是配的代码自己运行,就会出现问题,得不出博主的结果,也不敢问,自己觉得写的代码好像错了哈。所以自己在他们的基础上,归纳下哈。

主条件升(降)序,同等情况下次条件降(升)。这里介绍2种条件,2种以上也是一样的。

1、纯数值

先举例

7c6d6b1bc5599c3fdf433be27d50ed6e.png

查到的说sorted函数属于稳定排序,原型是

1c30f307d42f9d482311a5fbfceeb7a0.png

常用到的参数是iterable,key,reverse,具体是啥意思请自己查哈

这里的key可以是一个参数,也可以是一个自定义的函数,上面那行代码的意思就是对a这个列表,先按照元组的第二个元素进行降序排序,遇到同等情况,如这里的(3,4)(2,4)就对元组中第一个元素进行升序排序。

其结果是

4b97709a8cb32aeeb9ba09ffaaa5f6fd.png

主次条件的顺序等于key=lambda x:(-x[1],x[0])这里面的括号中顺序,也就是说如果你想要先按元组中第一个元素排升序,同等条件下,按第二个排降序,写法就是sorted(a,key=lambda x:x[0],-x[1])),这里加负号的原因是,该方法默认reverse=False,也就是升序,要是写降序,就得加负号。前提是排序的都是数值哈。

也可以分开来写,分开写,先排次条件,再排主条件。

2、字符

借鉴一个他人的数据,这里的排序要求是按照升序进行排序,条件优先:P>GD>GS>GA

teamitems = [{'team':'France' , 'P':1 , 'GD':-3 , 'GS':1 , 'GA':4},

{'team':'Uruguay' , 'P':7 , 'GD':4 , 'GS':4 , 'GA':0},

{'team':'SouthAfrica' , 'P':4 , 'GD':-2 , 'GS':3 , 'GA':5},

{'team':'Mexico' , 'P':4 , 'GD':1 , 'GS':3 , 'GA':2}]

print(sorted(teamitems ,key = lambda x:(x['P'],x['GD'],x['GS'],x['GA']),reverse=True) )

如果是要某一部分条件升,一部分降的话,就只能分开写,而且是有先后顺序地。优先级高的条件要写在最后。优先级低的反而写在前面。

这里key除了写简单的lambda,还可以写函数。

https://www.cnblogs.com/yeyong/p/6074825.html这篇博主写的list多级排序,

举例的第二个我运行是错误,

思路没问题,但是举的第二个例子第一行代码我运行出错,这里的items应该是

items = [x.split(',') for x in list(filter(None, data.split('\n')[2:]))]

fliter是过滤器,返回的迭代对象,另外博主注释的是忽略首行,应该还有第一行,所以从2开始。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值