sort()函数作用在list上,只不过是在原有的list上进行操作,会改变原有的list
sorted()函数是python内置的高阶函数,可以作用在list上也可以作用在其他的可迭代对象上,不会改变原来的list,只会返回一个新的list对象。
所以当作用的对象是可迭代对象字典时,我们可以给key传入相应的值,来决定根据键还是值进行相应的排序,如果是进行逆排序,可以利用reverse的取值来决定(False是升序,True是降序)
>>> d={'a':4,'b':3,'c':2,'d':1}
>>> sorted(d.items(),key=lambda x:x[0])
[('a', 4), ('b', 3), ('c', 2), ('d', 1)]
>>> sorted(d.items(),key=lambda x:x[1])
[('d', 1), ('c', 2), ('b', 3), ('a', 4)]
>>> sorted(d.items(),key=lambda x:x[0],reverse=True)
[('d', 1), ('c', 2), ('b', 3), ('a', 4)]
>>>
其实后面两句作用是一样的,一个是借用key中选字典的值进行排序,另一个是选字典的键进行逆排序~
题目:
对字符串排序时,有时候忽略大小写排序更符合习惯。请利用sorted()高阶函数,实现忽略大小写排序的算法。
输入:[‘bob’, ‘about’, ‘Zoo’, ‘Credit’]
输出:[‘about’, ‘bob’, ‘Credit’, ‘Zoo’]
使用Py2.7环境的代码:
def cmp_ignore_case(s1, s2):
if s1.lower()>s2.lower():
return 1
elif s1.lower()return -1
else:
return 0
print sorted(['bob', 'about', 'Zoo', 'Credit'], cmp=cmp_ignore_case)
使用python3的代码:(由于py3版本sorted无cmp函数,所以可以使用reverse函数代替):
>>> def low_L(L):
... L1=[]
... for s in L:
... L1.append(s.lower())
... return L1
...
>>> L=['bob', 'about', 'Zoo', 'Credit']
>>> sorted(low_L(L),reverse=False)
['about', 'bob', 'credit', 'zoo']
>>>
python中的函数不仅可以返回int,str,float,list类型,还可以返回函数!
>>> def f():
... print("我要调用函数g了")
... def g():
... print("我就是被调用的函数g")
... return g
...
>>> fun=f()
我要调用函数g了
>>> fun()
我就是被调用的函数g
题目:
请编写一个函数calc_prod(lst),它接收一个list,返回一个函数,返回函数可以计算参数的乘积。
解决办法:
def calc_prod(lst):
def product():
def f(x,y):
return x*y
return reduce(f,lst)
return product
f = calc_prod([1, 2, 3, 4])
print f()
今天先学到这,去睡觉啦~