python初学者必须吃透的这些内置函数( 四 )

a = [5,7,6,3,4,1,2]b = sorted(a)#保留原列表a [5, 7, 6, 3, 4, 1, 2]b[1, 2, 3, 4, 5, 6, 7] #利用keyL=[('b',2),('a',1),('c',3),('d',4)]sorted(L, key=lambda x:x[1])[('a', 1), ('b', 2), ('c', 3), ('d', 4)]#按年龄排序students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]sorted(students, key=lambda s: s[2]) [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]#按降序sorted(students, key=lambda s: s[2], reverse=True)[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)] #降序排列a = [1,4,2,3,1]sorted(a,reverse=True) [4, 3, 2, 1, 1sort 与 sorted 区别:
sort 是应用在list 的方法 , sorted可以对所有可迭代的对象进行排序操作;list的sort 方法返回的是对已经存在的列表进行操作 , 无返回值 , 而内建函数sorted方法返回的是一个新的 list , 而不是在原来的基础上进行的操作 。
reversed()描述:reversed函数返回一个反转的迭代器 。
语法:reversed(seq)
参数:seq -- 要转换的序列 , 可以是 tuple, string, list 或 range 。
#反转列表rev = reversed([1,4,2,3,1])list(rev)[1, 3, 2, 4, 1]#反转字符串rev = reversed('我爱中国')list(rev)['国', '中', '爱', '我']''.join(rev)'国中爱我's = '我的世界开始下雪'''.join(reversed(s))'雪下始开界世的slice()描述:slice() 函数实现切片对象 , 主要用在切片操作函数里的参数传递 。返回一个表示由 range(start, stop, step) 所指定索引集的 slice对象
语法:

  • class slice(stop)
  • class slice(start, stop[, step])
参数:
  • start -- 起始位置
  • stop -- 结束位置
  • step -- 间距
a = [1,4,2,3,1]a[slice(0,5,2)] #等价于a[0:5:2][1, 2, 1]a = list(range(10))a[slice(3)][0, 1, 2enumerate()描述:enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列 , 同时列出数据和数据下标 , 一般用在for循环当中 。返回一个可以枚举的对象 , 该对象的next()方法将返回一个元组 。enumerate在字典上是枚举、列举的意思 。
语法:enumerate(sequence, [start=0])
参数:sequence -- 一个序列、迭代器或其他支持迭代对象 。
start -- 下标起始位置 。
L = ['Spring', 'Summer', 'Fall', 'Winter']enumerate(L)<enumerate at 0x226e1ee1138>#生成的额迭代器 , 无法直接查看list(enumerate(L))#列表形式 , 可以看到内部结构 , 默认下标从0开始[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')] list(enumerate(L, start=1)) #下标从 1 开始[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]for i,v in enumerate(L):print(i,v)0 Spring1 Summer2 Fall3 Winterfor i,v in enumerate(L,1):print(i,v)1 Spring2 Summer3 Fall4 Winters = ["a","b","c"] for i ,v in enumerate(s,2):print(i,v)2 a3 b4 c普通的 for 循环i = 0seq = ['one', 'two', 'three']for element in seq:print (i, seq[i])i+= 10 one1 two2 three在看一个普通循环的对比案例for 循环使用 enumerate seq = ['one', 'two', 'three']for i, element in enumerate(seq):print (i, element) 0 one1 two2 three seq = ['one', 'two', 'three']for i, element in enumerate(seq,2):print (i, element)2 one3 two4 threeall()描述:接受一个迭代器 , 如果迭代器(元组或列表)的所有元素都为真 , 那么返回True , 否则返回False , 元素除了是0、空、None、False外都算 True 。注意:空元组、空列表返回值为True , 这里要特别注意 。
语法:all(iterable)
参数:iterable -- 元组或列表
案例:
all([1,0,3,6])False all([1,9,3,6])True all(['a', 'b', '', 'd'])Falseall([]) #空列表为真True all(()) #空元组为真Trueany()描述:接受一个迭代器 , 如果迭代器里有一个元素为真 , 那么返回True , 否则返回False , 元素除了是 0、空、None、False 外都算 True 。
语法:any(iterable)
参数:iterable -- 元组或列表
any([0,0,0,[]])False any([0,0,1])True any((0, '', False))False any([]) # 空列表False any(()) # 空元组Falsezip()描述:zip() 函数用于将可迭代的对象作为参数 , 将对象中对应的元素打包成一个个元组 , 然后返回由这些元组组成的对象 , 这样做的好处是节约了不少的内存 。我们可以使用 list() 转换来输出列表 。 , 如果各个迭代器的元素个数不一致 , 则返回列表长度与最短的对象相同 , 利用 * 号操作符 , 可以将元组解压为列表 。


推荐阅读