python 实用函数进阶(更新中)

不言
不言 原创
2018-04-13 17:11:25 990浏览

本篇文章分享的内容是python 实用函数进阶,现在分享给大家,有需要的朋友可以参考一下本篇文章的内容

1.pyhton断言


如何为assert断言语句添加异常参数
assert的异常参数,其实就是在断言表达式后添加字符串信息,用来解释断言并更好的知道是哪里出了问题。格式如下:
assert expression [, arguments]
assert 表达式 [, 参数]

assert len(lists) >=5,’列表元素个数小于5’
assert 2==1,’2不等于1’

2.list 复杂排序

data_list = []  
data_list.append({'softname':'1','version':'1.2.2.2'})  
data_list.append({'softname':'7','version':'1.2.2.2'})  
data_list.append({'softname':'5','version':'1.2.2.2'})  
data_list.append({'softname':'2','version':'1.2.2.2'})  
data_list.append({'softname':'3','version':'1.2.2.2'})  
data_list.append({'softname':'9','version':'1.2.2.2'})  
#升序  
data_list.sort(key=lambda obj:obj.get('softname'), reverse=False)  

print data_list  
#[{'softname': '1'}, {'softname': '2'}, {'softname': '3'}, {'softname': '5'}, {'softname': '7'}, {'softname': '9'}]  
#降序  
data_list.sort(key=lambda obj:obj.get('softname'), reverse=True)  
print data_list  
#[{'softname': '9'}, {'softname': '7'}, {'softname': '5'}, {'softname': '3'}, {'softname': '2'}, {'softname': '1’}]

对List进行排序,Python提供了两个方法

方法1.用List的内建函数list.sort进行排序

list.sort(func=None, key=None, reverse=False)

Python实例:

>>> list = [2,5,8,9,3]    
>>> list    [2,5,8,9,3]    
>>> list.sort()    
>>> list    [2, 3, 5, 8, 9]

方法2.用序列类型函数sorted(list)进行排序(从2.4开始)

Python实例:

>>> list = [2,5,8,9,3]    
>>> list    [2,5,8,9,3]    
>>> sorted(list)   
[2, 3, 5, 8, 9]

两种方法的区别:
sorted(list)返回一个对象,可以用作表达式。原来的list不变,生成一个新的排好序的list对象。
list.sort() 不会返回对象,改变原有的list。
其他sort的实例:
实例1:正向排序

>>>L = [2,3,1,4]  
>>>L.sort()  
>>>L  
>>>[1,2,3,4]

实例2:反向排序

>>>L = [2,3,1,4]  
>>>L.sort(reverse=True)  
>>>L  
>>>[4,3,2,1]

实例3:对第二个关键字排序

>>>L = [('b',6),('a',1),('c',3),('d',4)]   
>>>L.sort(lambda x,y:cmp(x[1],y[1]))   
>>>L  
>>>[('a', 1), ('c', 3), ('d', 4), ('b', 6)]

实例4: 对第二个关键字排序

>>>L = [('b',6),('a',1),('c',3),('d',4)]  
>>>L.sort(key=lambda x:x[1])  
>>>L  
>>>[('a', 1), ('c', 3), ('d', 4), ('b', 6)]

实例5: 对第二个关键字排序

>>>L = [('b',2),('a',1),('c',3),('d',4)]  
>>>import operator  >>>L.sort(key=operator.itemgetter(1))   
>>>L  
>>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)]

实例6:(DSU方法:Decorate-Sort-Undercorate)

>>>L = [('b',2),('a',1),('c',3),('d',4)]  
>>>A = [(x[1],i,x) for i,x in enumerate(L)] #i can confirm the stable sort  >>>A.sort()  
>>>L = [s[2] for s in A] 
>>>L  
>>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)]

以上给出了6中对List排序的方法,其中实例3.4.5.6能起到对以List item中的某一项

为比较关键字进行排序.

效率比较:

cmp < DSU < key

通过实验比较,方法3比方法6要慢,方法6比方法4要慢,方法4和方法5基本相当

多关键字比较排序:

实例7:

>>>L = [('d',2),('a',4),('b',3),('c',2)]  
>>> L.sort(key=lambda x:x[1])  
>>> L  
>>>[('d', 2), ('c', 2), ('b', 3), ('a', 4)]

我们看到,此时排序过的L是仅仅按照第二个关键字来排的,

如果我们想用第二个关键字排过序后再用第一个关键字进行排序呢?有两种方法

实例8:

>>> L = [('d',2),('a',4),('b',3),('c',2)]  
>>> L.sort(key=lambda x:(x[1],x[0]))  
>>> L  
>>>[('c', 2), ('d', 2), ('b', 3), ('a', 4)]

实例9:

>>> L = [('d',2),('a',4),('b',3),('c',2)]  
>>> L.sort(key=operator.itemgetter(1,0))  
>>> L  
>>>[('c', 2), ('d', 2), ('b', 3), ('a', 4)]  

#实例8能够工作呢?原因在于tuple是的比较从左到右比较的,比较完第一个,如果相等,比较第二个

相关推荐:

关于Python函数的深度解剖

详解python函数之map,Filter,Reduce

以上就是python 实用函数进阶(更新中) 的详细内容,更多请关注php中文网其它相关文章!

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。