python入门20180707 列表排序题目-排序函数sorted、enumerate函数、lambda匿名函数

有一个题目是:

列表a=[1,6,9,4,5,3],列表b=[9,1,3],按照a中的元素顺序给b中的元素排序

解题:

#列表排序
def my_sort(items1,items2):
    index_map= { k:i for i,k in enumerate(items1)}return sorted(items2,key=lambda x:index_map[x])

def my_sort2(items1,items2):
    return sorted(items2,key = items1.index)
enumerate(seq,[start=0]) 函数用于将一个可遍历的数据对象seq(列表、元组、字符串等)组合成一个索引序列,同时列出数据和数据下标,常用于for循环中;
参数:seq 为可遍历的数据对象
start 为可选参数,下标起始位置,默认为0
返回值:返回enumerate(枚举)对象

In [9]: seasons = ['Spring','Summer','Fail','Winter']

In [10]: enumerate(seasons)
Out[10]: <enumerate at 0x7f1fe4106b40>

In [11]: list(enumerate(seasons))
Out[11]: [(0, 'Spring'), (1, 'Summer'), (2, 'Fail'), (3, 'Winter')]

In [12]: list(enumerate(seasons,start = 1))
Out[12]: [(1, 'Spring'), (2, 'Summer'), (3, 'Fail'), (4, 'Winter')]

In [13]: for i,element in enumerate(seasons):
   ...:     print('{}:{}'.format(i,element))
   ...:     
  
0:Spring
1:Summer
2:Fail
3:Winter

我们常常看到一个这样的表达式 

A=lambda x:x+1

可能会一头雾水不知道怎么计算 最基本的理解就是
def A(x):
return x+1
但是理解程序不会将一个表达式在转为函数的,因为lambda函数设计出来就是简化def的。
其实很简单 我们可以这样分析通过冒号就能知道这句话什么意思
冒号左边→想要传递的参数
冒号右边→想要得到的数(可能带表达式)
 
sorted函数
python3中sorted函数有三个参数(python3取消了cmp参数):
1、iterable -- 可迭代对象(可以对所有可迭代的对象进行排序操作)
2、key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序;
3、reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)
返回值:
返回重新排序的列表;
In [1]: L = [('b',3),('a',4),('c',1),('d',2)]

In [2]: sorted(L,key = lambda x:x[1]) #假如a是一个由元组构成的列表,这时候就麻烦了,我们需要用到参数key,也就是关键词,看下面这句命令,lambda是一个隐函数,是固定写法,不要写成别的单词;
#x表示列表中的一个元素,在这里,表示一个元组,x只是临时起的一个名字,你可以使用任意的名字;x[0]表示元组里的第一个元素,当然第二个元素就是x[1];
#所以这句命令的意思就是按照列表中第二个元素排序   Out[
2]: [('c', 1), ('d', 2), ('b', 3), ('a', 4)] In [3]: sorted(L,key = lambda x:x[0]) Out[3]: [('a', 4), ('b', 3), ('c', 1), ('d', 2)] In [4]: L[1] Out[4]: ('a', 4) In [5]: sorted(L,cmp = lambda x,y :cmp(x[1],y[1])) --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-5-b33ffc1a7fce> in <module>() ----> 1 sorted(L,cmp = lambda x,y :cmp(x[1],y[1])) TypeError: 'cmp' is an invalid keyword argument for this function In [7]: students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)] In [8]: sorted(students, key=lambda s: s[2], reverse=True) Out[8]: [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]

 



posted on 2018-07-07 16:53  欢喜等大年  阅读(263)  评论(0编辑  收藏  举报

导航