python进阶系列学习(二)

sorted()函数和sort()函数

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()

今天先学到这,去睡觉啦~

你可能感兴趣的:(python_practice)