第二天 第四章 序列的应用 - 列表
python内置了5种常用序列结构,分别是列表、元组、集合、字典、字符串。这些序列有以下几种通用的操作,其中集合和字典不支持索引、切片、相加、相乘的操作。
1. 索引:序列中每个元素都有一个编号,这个编号从0开始递增,即下标为0表示第一个元素,下标为1表示第二个元素,以此类推。
索引可以是负数,从右向左计数,即最后一个元素的索引是-1,倒数第二个元素的索引是-2,依次类推。
2. 切片:这是访问序列中元素的另一种方法,它可以访问一定范围内的元素。切片操作可以生成一个新的序列。语法: sname[start : end : step]
如果想要复制整个序列,可以将start和end省略,但中间冒号要保留。如: nba[:] # 表示复制名称为nba的整个序列
3. 序列相加:两个序列相加,即将两个序列拼接起来,不会去除重复的元素。注:只能相同的序列相加,如列表+列表、元组+元组等。
4. 乘法:序列乘以n,表示把此序列重复n次相加。
还可以实现初始化指定长度列表的功能。如: emptylist = [None]*5 # [None, None, None, None, None]
5. 检查某个元素是否是序列的成员:语法格式: value in sequence # value表示要检查的元素,sequence表示指定的序列,如果序列中包含被检查的元素,则返回True
也可以使用 not in 关键字检查某个元素是否不包含在指定序列中。
6. 序列的内置函数:
| 函数 | 作用 |
| len() | 计算序列长度,即多少个元素 |
| max() | 返回序列中最大元素 |
| min() | 返回序列中最小元素 |
| list() | 将序列转换为列表 |
| str() | 将序列转换为字符串 |
| sum() | 计算元素的和 |
| sorted() | 对元素进行排序。读音: [ˈsɔːtɪd] |
| reversed() | 反向序列中的元素。读音:[rɪˈvɜːst] |
| enumerate() | 将序列组合为一个索引序列,多用在for循环中。读音:[ɪˈnjuːməreɪt] |
一、列表:是python中内置的可变序列。形式上,所有元素都放在一对中括号中,两个相邻的元素以逗号分隔。内容上,可以将整数、实数、字符串、列表、元组等任何类型的内容放入其中。且同一个列表中,元素类型可以不同。
1. 使用赋值运算符直接创建列表: listname = [element 1, element 2, element 3,...,element n] 注:建议使用时,一个列表只放入同一种类型的数据。
2. 创建空列表: emptylist = []
3. 创建数值列表: list(data) # data可以是range对象、字符串、元组或其它可迭代类型的数据
4. 删除列表: del listname # 这个不常用,因为python有自带的垃圾回收机制,能自动删除不用的列表
5. 访问列表元素:
print(['hello', 1, '你好', 3.14]) # ['hello', 1, '你好', 3.14] print(['hello', 1, '你好', 3.14][2]) # 你好
6. 遍历列表:
# 第一种方法,用for循环,只能输出元素的值 for item in listname: print(item) # 第二种方法,用for循环和enumerate()函数可以同时输出索引值和元素内容 for index, item in enumerate(listname): print(index, item)
7. 添加列表元素:
listname.append(obj) # obj为python支持的类型的对象,如:列表、字符串等等。注:obj是作为一个元素添加到listname中的。 listname.insert(index,obj) # index是将obj插入到指定位置,这个不常用,速度慢。 listname.extend(obj) # 将obj合并到listname,相当于两个列表相加
8. 修改元素: listname[index]=obj # 使用赋值即可修改元素
9. 删除元素:
# 1 根据索引删除 del listname[-2] # 2 根据元素值删除元素 listname.remove(obj) # 如果列表中没有要删除的元素,会报错,所以最好判断一下 if listname.count(obj)>0: listname.remove(obj)
10. 获取指定元素出现的次数: listname.count(obj) # obj必须是精确匹配,返回出现的次数
11. 获取指定元素首次出现的下标: listname.index(obj) # obj必须是精确匹配,返回首次匹配的索引值
12. 统计数值列表的元素和: sum(iterable[, start]) # iterable表示要统计的列表,start表示统计结果再加上start的值
13. 对列表进行排序: listname.sort(key=None,reverse=False) # 这是使用列表对象的方法进行排序
key:表示指定从每个元素中提取一个用于比较的键(如:设置key=str.lower表示排序时不区分字母大小写
reverse:是可选参数,True表示降序,False表示升序,默认为False。
此方法对中文排序支持不好。需要重新编写。
14. 使用内置的sorted()函数进行排序: sorted(listname, key=None, reverse = False)
sort()方法会改变原列表的排序,sorted()函数不改变原列表,而是建立一个排序后的副本
15. 列表推导式:可以快速生成列表,有以下几种常用的语法格式。
# 语法格式 list = [expression for var in range] # expression 表达式,用于计算新列表的元素。 # var 循环变量 # range 采用range()函数生成的range对象。 import random randomnumber = [random.randint(10, 100) for i in range(10)] print(randomnumber) # [64, 18, 53, 58, 38, 84, 55, 24, 25, 66]
# list = [expression for var in oldlist] # expression 表达式,用于计算新列表的元素 # var 变量,值为后面列表的每个元素值 # oldlist 用于生成新列表的原列表 price = [1200, 5330, 2887, 6299, 5555] # 原列表 sale = [var*0.5 for var in price] # 生成打五折的新列表 print(price) print(sale)
# 从列表中选择符合条件的元素组成新的列表 # newlist = [expression for var in list if condition] # condition 条件表达式,用于指定筛选条件 price = [1200, 5330, 2887, 6299, 5555] sale = [var for var in price if var > 3000] print(price) print(sale) price = [1200, 5330, 2887, 6299, 5555] sale = [var*0.8 for var in price if var > 3000] # 高于3000的打八折 print(price) print(sale)
16. 二维列表的创建有三种方法
# 直接定义 list1 = [ [1,2,3], [4,5,6], [7,8,9] ] print(list1) # 使用嵌套的for循环 arr = [] for i in range(3): arr.append([]) for j in range(4): arr[i].append(j) print(arr) # 使用列表推导式,推荐使用这种方法 arr = [[j for j in range(4)] for i in range(3)] print(arr)
import datetime mot = [ '今天是星期一:\n坚持下去不是因为我很坚强,而是因为我别无选择。', '今天是星期二:\n含泪播种的人一定能笑着收获', '今天是星期三:\n没有伞的孩子必须努力奔跑!', '今天是星期四:\n你不勇敢,没人替你坚强!', '今天是星期五:\n命运如同手中的掌纹,无论多曲折,终掌握在自己手中。', '今天是星期六:\n真正的强者,不是流泪的人,而是含泪奔跑的人。', '今天是星期日:\n流过泪的眼睛更明亮,滴过血的心灵更坚强!' ] day=datetime.datetime.now().weekday() print(mot[day]) # datetime.datetime.now() 获取当前日期 # datetime.datetime.now().weekday() 在日期对象中获取星期

浙公网安备 33010602011771号