python多级比较的两种方法
Posted protectione055
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python多级比较的两种方法相关的知识,希望对你有一定的参考价值。
Description
大家都知道在电商网站上买东西时,网站会根据我们的搜索条件给出非常多的商品。这些商品会以依据某一种排序规则进行排序,依次呈现在我们面前。现在某电商网站关于书籍的排序依据有这么几项,综合、销量、出版时间、价格、用户评分。假设综合排名的规则为:首先看价格,价格低的排名靠前,如果价格相同,则看出版时间,出版的晚的排名靠前,如果这两项都相同则看销量,销量大的靠前,如果前三项均相同,最后看用户评分,用户评分高的排名靠前。
请依据此规则写一段给各个书按综合排名的程序。
Input
第一行为一个整数n(1<n<100),后面是n行书籍的数据,共7列,每列之间以空格分隔。其中第一列为书名(长度小于60且仅包含大写字母和小写字母的字符串),第二列到第七列均为大于等于0的整数,分别代表该书的销量、出版时间的年、月、日、价格和用户评分。
Output
Sample Input Copy
3
CPrimerPlus 3000 2013 12 6 60 44
ComputerSystemsAProgrammersPerspective 8000 2015 3 12 156 39
TheCProguammingLanguage 50000 1978 2 22 5 46
Sample Output Copy
TheCProguammingLanguage 50000 1978 2 22 5 46
CPrimerPlus 3000 2013 12 6 60 44
ComputerSystemsAProgrammersPerspective 8000 2015 3 12 156 39
Python第四次Oj有这么一个题。默认的sort函数会先对第一个比较,如果采用嵌套条件进行排序的话太过繁琐,人看着这代码也感觉有点晕。想起sort函数有一个key参数可以调用返回迭代对象的函数,所以我想应该有方法可以通过key参数实现多级比较。查阅资料后发现以下两种方法。
1.lambda返回一个元组
lambda的一般形式是关键字lambda后面跟一个或多个参数,紧跟一个冒号,以后是一个表达式。lambda是一个表达式而不是一个语句。它能够出现在Python语法不允许def出现的地方。作为表达式,lambda返回一个值(即一个新的函数)。lambda用来编写简单的函数,而def用来处理更强大的任务。
例:lambda的使用【1】
1、一般的形式
f = lambda x, y, z :x+y+z
print f(1,2,3)
#output:6 *②
2.itemgetter
operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号。看下面的例子
例:
from operator import itemgetter
a = [1,2,3]
b=operator.itemgetter(1,0) //定义函数b,获取对象的第1个域和第0个的值
>>> b(a)
(2, 1)
要注意,operator.itemgetter函数获取的不是值,而是定义了一个函数,通过该函数作用到对象上才能获取值。*③
例:
sorted(student_tuples, key=itemgetter(1,2))
itemgetter的参数是按排序优先级排列的列表下标或字典索引*④
参考文献:
①https://blog.csdn.net/w417950004/article/details/86253721(多级排序)
②https://www.cnblogs.com/mxh1099/p/5386529.html(lambda表达式)
③https://www.cnblogs.com/zhoufankui/p/6274172.html(itemgetter函数)
④https://blog.csdn.net/jb19900111/article/details/50649932(sort、sorted高级排序)
以上是关于python多级比较的两种方法的主要内容,如果未能解决你的问题,请参考以下文章