Python 知识量:10 - 41 - 150
排序在列表的应用中很常见,可以使用函数sort()来实现列表元素的排序。与反转函数reverse()一样,sort()也是直接修改列表,不会对列表进行拷贝。
>>> ls=[11,65,2,63,8] >>> ls.sort() >>> ls [2, 8, 11, 63, 65]
Python对序列的排序方式称为字典顺序,即字母顺序。基本原理是:首先按第一项对各元素进行排序,如果第一项相同,则按二项排序,以此类推。
函数sort()总是按升序排列元素,如果需要按降序排列,可以使用反转函数reverse()对sort()排序后的序列再反转一次。
函数sort()可以对元组进行排序,但列表元素必须全部是元组类型,不能混合其他类型。也可以对列表元素全部是列表的列表进行排序,同样不能混合其他类型。
>>> #下面对元组排序 >>> ls2=[(1,65),(2,56),(2,45),(0,89)] >>> ls2.sort() >>> ls2 [(0, 89), (1, 65), (2, 45), (2, 56)] >>> ls2.reverse() >>> ls2 [(2, 56), (2, 45), (1, 65), (0, 89)] >>> #下面对列表作为元素的列表进行排序 >>> ls2=[[1,65],[2,56],[2,45],[0,89]] >>> ls2.sort() >>> ls2 [[0, 89], [1, 65], [2, 45], [2, 56]] >>> ls2.reverse() >>> ls2 [[2, 56], [2, 45], [1, 65], [0, 89]] >>> #下面对混合的元组和整数类型排序,会出错。 >>> ls2=[2,89,(2,56),(2,45),12] >>> ls2.sort() Traceback (most recent call last): File "<pyshell#38>", line 1, in <module> ls2.sort() TypeError: '<' not supported between instances of 'tuple' and 'int' >>> #下面对混合的列表和整数类型排序,会出错。 >>> ls2=[2,86,[2,56],[2,45],12] >>> ls2.sort() Traceback (most recent call last): File "<pyshell#36>", line 1, in <module> ls2.sort() TypeError: '<' not supported between instances of 'list' and 'int'
列表解析是Python提供的一种用于创建列表的特殊表示法。列表解析应用起来非常的简洁且易于理解,可以将复杂的任务用精妙简短的语局表达出来。例如:下面创建一个20以内的正偶数的列表。
>>> [n*2 for n in range(1,11)] [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
如果采用常规方法需要使用循环语句,会比以上代码复杂的多。
可以利用列表解析来批量的修改列表中的每个值,例如:将列表中的单词全部变为大写。
>>> animals=['dog','cat','pig','bird'] >>> animals ['dog', 'cat', 'pig', 'bird'] >>> animals2=[letter.upper() for letter in animals] >>> animals2 ['DOG', 'CAT', 'PIG', 'BIRD']
列表解析在剔除不想要的列表元素方面非常有用,而且操作起来很方便和高效。
1、剔除负数。
>>> n=[2,-9,-65,78,56,7,12] >>> n2=[m for m in n if m>0] >>> n2 [2, 78, 56, 7, 12]
2、剔除元音字母。
>>> str='We like football.' >>> str 'We like football.' >>> str2=''.join([letter for letter in str if letter.lower() not in 'aeiou']) >>> str2 'W lk ftbll.'
以上代码中,for letter in str用于从字符串str中逐个提取字母;letter.lower()用于将提取的字母修改为小写;not in 'aeiou'用于确保非元音字符才会保留。由于列表解析返回的是一个列表,因此使用函数join()将其拼接为字符串。
3、生成器表达式。
在以上代码中,如果舍弃列表解析中的方括号,传递给函数join()的表达式就是一个生成器表达式。
>>> str2=''.join(letter for letter in str if letter.lower() not in 'aeiou') >>> str2 'W lk ftbll.' >>> str2=''.join(letter.upper() for letter in str if letter.lower() not in 'aeiou') >>> str2 'W LK FTBLL.'
与列表解析相比,每当函数join()需要一个元素时,生成器表达式才计算并传递给它,直到循环完毕;而列表解析是一次性生成全部元素建立列表后直接传递给函数join()。
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6