python传入比较函数 python比较语句

python sort()用法Python中的sort()方法用于数组排序,下面以实例形式对此加以详细说明:
一、基本形式
列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法 , 因为元组是不可修改的 。
x = [4, 6, 2, 1, 7, 9]x.sort()
print x # [1, 2, 4, 6, 7, 9]
如果需要一个排序好的副本 , 同时保持原有列表不变,怎么实现呢
x =[4, 6, 2, 1, 7, 9]
y = x[ : ]
y.sort()
print y #[1, 2, 4, 6, 7, 9]
print x #[4, 6, 2, 1, 7, 9]
注意:y = x[:] 通过分片操作将列表x的元素全部拷贝给y,如果简单的把x赋值给y:y = x,y和x还是指向同一个列表,并没有产生新的副本 。
另一种获取已排序的列表副本的方法是使用sorted函数:
x =[4, 6, 2, 1, 7, 9]
y = sorted(x)
print y #[1, 2, 4, 6, 7, 9]
print x #[4, 6, 2, 1, 7, 9]
sorted返回一个有序的副本,并且类型总是列表,如下:
print sorted('Python') #['P', 'h', 'n', 'o', 't', 'y']
二、自定义比较函数
可以定义自己的比较函数,然后通过参数传递给sort方法:
def comp(x, y):
if xy:
return 1
elif xy:
return -1
else:
return 0
nums = [3, 2, 8 ,0 , 1]
nums.sort(comp)
print nums # 降序排序[8, 3, 2, 1, 0]
nums.sort(cmp) # 调用内建函数cmp ,升序排序
print nums # 降序排序[0, 1, 2, 3, 8]
三、可选参数
sort方法还有两个可选参数:key和reverse
1、key在使用时必须提供一个排序过程总调用的函数:
x = ['mmm', 'mm', 'mm', 'm' ]
x.sort(key = len)
print x # ['m', 'mm', 'mm', 'mmm']
2、reverse实现降序排序,需要提供一个布尔值:
y = [3, 2, 8 ,0 , 1]
y.sort(reverse = True)
print y #[8, 3, 2, 1, 0]
python sorted函数(比较大?。?/h2>students = [('john', 'A', 15), ('jane', 'B', 12), ('dave','B', 10)]
print(sorted(students,key=lambda s: s[0]))
key指定一个接收一个参数的函数,这个函数用于从每个元素中提取一个用于比较的关键字 。默认值为None
例子
为啥会这样呢?默认不是应该按升序排列 。
仔细看 我们lambda返回的是一个元祖,(布尔,布尔,绝对值)
由于key函数主要作用是根据我们自己的要求 , 取出指定的元素来进行排序,不过我们现在返回的是一个元祖,所以我们首先按布尔进行排序,当有相同的我们在往后面一个元素找,然后进行排序,所以就变成这样了 。
python的sorted排序问题test = [6,1,2,3,4,5]
a =sorted(test,reverse=True)
print a
结果如下python传入比较函数:
[6, 5, 4, 3, 2, 1]
python传入比较函数你可以参考下sorted,里面是可以接收reverse参数python传入比较函数的
def sorted(iterable, cmp=None, key=None, reverse=False): # real signature unknown; restored from __doc__
""" sorted(iterable, cmp=None, key=None, reverse=False) -- new sorted list """
pass
python怎么向类中的函数传递参数Python中函数参数的传递是通过“赋值”来传递的 。但这条规则只回答了函数参数传递的“战略问题”,并没有回答“战术问题”,也就说没有回答怎么赋值的问题 。函数参数的使用可以分为两个方面,一是函数参数如何定义,二是函数在调用时的参数如何解析的 。而后者又是由前者决定的 。函数参数的定义有四种形式:
1. F(arg1,arg2,...)
2. F(arg2=value,arg3=value...)
3. F(*arg1)
4. F(**arg1)
第1 种方式是最“传统”的方式:一个函数可以定义不限个数参数 , 参数(形式参数)放在跟在函数名后面的小括号中,各个参数之间以逗号隔开 。用这种方式定义的函数在调用的时候也必须在函数名后的小括号中提供相等个数的值(实际参数),不能多也不能少 , 而且顺序还必须相同 。也就是说形参和实参的个数必须一致,而且想给形参1的值必须是实参中的第一位 , 形参与实参之间是一一对应的关系 , 即“形参1=实参1 形参2=实参2...” 。很明显这是一种非常不灵活的形式 。比如:"def addOn(x,y): return x + y" , 这里定义的函数addOn,可以用addOn(1,2)的形式调用,意味着形参x将取值1,主将取值2 。addOn(1,2,3)和addOn (1)都是错误的形式 。

推荐阅读