Python学习笔记(八)列表与元组
一、列表的创建
示例:
1 # 列表中的元素可以是任意数据类型 2 li = [1, 2, 3, 4, '张三', '李四'] 3 print(li) 4 li1 = [] # 空列表 用于存放数据 5 # list() 中必须是可迭代对象 6 li2 = list('123456789') # 等价于['1','2','3','4','5','6','7','8','9']
二、列表常用操作
1.访问列表中的值
1)根据索引访问
1 name_list = ['张三', '李四', '王五', '赵六'] 2 print(name_list[0]) 3 print(name_list[1]) 4 print(name_list[2])
2)根据切片访问
1 # listname[start:end:step] 2 # 切片范围左闭右开 3 # 起始值默认为0 4 # 步长默认为1 5 li = list(range(1, 11, 1)) 6 print(li) 7 # 拿到所有偶数 8 print(li[1::2]) 9 # 拿到大于5的数 10 print(li[5:])
3)index()返回指定数据所在位置的下标
1 li = list(range(1, 11, 1)) 2 # 元素为5的索引值,不存在时报错 3 print(li.index(5))
4)count()统计指定数据在列表中出现的次数
1 li = list(range(1, 11, 1)) 2 print(li.count(1))
5)len()访问列表长度
1 # len函数的核心实现就是通过循环实现的 2 li_adc = [1, 23, 34, 45, 767, 143, 13, 12, 4, 5, 76, 8, 9, 0, 12, 3, 123, 123, 13, 124, 123, 12, 124, 12, 3, 124, 1, 3, 3 12, 4, 65, 7, 586, 79, 6, 9, 6, 67, ] 4 print(len(li_adc))
1 # 成员运算符:in not in 2 # 逻辑运算符:and or not 3 name_list = ['张三', '李四', '王五', '赵六'] 4 name = input('请输入您要搜索的名字:') 5 if name in name_list: 6 print(f'您输入的名字是{name},名字已经存在') 7 else: 8 print(f'您输入的名字是{name},名字不存在')
2.列表添加元素
1)append()用于在列表的末尾追加元素
1 name_list = ['张三', '李四', '王五', '赵六'] 2 print(name_list) 3 name_list.append('阿坤') 4 print(name_list)
2)extend()扩展列表
3)insert()在指定位置新增数据
1 name_list = ['张三', '李四', '王五', '赵六'] 2 alist = ['唱', '跳', 'rap', '篮球'] 3 name_list.append(alist) # 添加 4 print(name_list) 5 name_list.extend(alist) # 拓展 6 print(name_list) 7 name_list.insert(2, '123456') # 指定位置新增数据 8 print(name_list)
3.删除列表元素
1)del
1 name_list = ['张三', '李四', '王五', '赵六'] 2 print(name_list) 3 del name_list # 此列表已经被删除 4 print(name_list) # NameError: name 'name_list' is not defined
name_list 删除,打印会报错
1 name_list = ['张三', '李四', '王五', '赵六'] 2 del name_list[3] 3 del name_list[4] # IndexError: list assignment index out of range 4 print(name_list)
name_list 索引4超范围,报错
2)clear()清空列表
1 name_list = ['张三', '李四', '王五', '赵六'] 2 name_list.clear() 3 print(name_list) # 空列表
3)pop()删除指定下标的元素,默认删除最后一个
1 name_list = ['张三', '李四', '王五', '赵六'] 2 name_list.pop() 3 name_list.pop(2) 4 name_list.pop(4) # IndexError: pop index out of range 5 print(name_list)
索引超范围,报错
4)remove()删除指定元素
1 name_list = ['张三', '李四', '王五', '赵六'] 2 name_list.remove('罗翔') # ValueError: list.remove(x): x not in list 3 print(name_list)
指定元素不存在列表中,报错
4.修改列表元素
1)根据索引修改
1 # 1 拿到六这个元素 2 # 2 对这个元素进行重新赋值 3 li = [1, 2, 3, 4, 5, '六', 7, 8, 9] 4 print(li[5]) 5 i = li.index('六') # 获取“六”的索引 6 li[i] = 6 7 print(li)
2)使用切片修改
1 # 不是一一对应 2 li = [1, 2, 3, 4, 5, '六', 7, 8, 9] 3 li[0:3] = ['a', 'b'] 4 li[0:3] = ['a', 'b', 'c'] 5 li[0:3] = ['a', 'b', 'c', 'd'] 6 print(li)
注:切片修改替换的是指定片段,被替换数量和新元素数量并不严格要求一致
3)reverse()逆置
1 num_list = [1, 5, 2, 3, 6, 8] 2 num_list.reverse() 3 print(num_list)
4)sort(reverse=False)排序
1 num_list = [1, 5, 2, 3, 6, 8] 2 num_list.sort(reverse=False) # 从小到大 升序 默认 3 print(num_list) 4 5 num_list.sort(reverse=True) # 从大到小 降序 6 print(num_list) 7 8 # 必须同类型数据才能排序 9 li = [1, 2, 3, 4, 5, '六', 7, 8, 9] 10 li.sort(reverse=True) # TypeError: '<' not supported between instances of 'str' and 'int' 11 print(li)
5.列表的复制
1)copy()复制一个列表 浅复制
1 name_list = ['张三', '李四', '王五', '赵六'] 2 name_list2 = name_list.copy() 3 print(name_list, id(name_list)) 4 print(name_list2, id(name_list2)) # 内存改变
6.列表的循环遍历
1 name_list = ['张三', '李四', '王五', '赵六'] 2 # for 3 for i in name_list: # i指的是值 4 print(i) 5 6 # while 7 i = 0 8 while i < len(name_list): 9 print(name_list[i]) 10 i += 1
7.列表的嵌套
1 name_list = [ 2 ['张三', '李四', '阿坤'], 3 ['唱', '跳', '篮球'], 4 ['甲', '乙', '丙'] 5 ] 6 7 # 找到甲 8 print(name_list[2][0]) 9 print(name_list[-1][0])
三、元组
1 # 不可修改 2 tup = (1, 2, 3, 4, 5) 3 # tup[1] = 'asd' # TypeError: 'tuple' object does not support item assignment 4 print(tup, type(tup)) 5 tup1 = tuple('123456') 6 print(tup1, type(tup1))
如果定义的元组只有一个数据,name这个数据后面也要添加逗号,否则数据类型为唯一的这个数据的数据类型
1 tup2 = (10,) 2 print(tup2, type(tup2))
1.查找
元组数据不支持修改,只支持查找
1)index()
查找某个数据,如果数据存在返回对应的下标,否则报错,语法和列表、字符串的index方法相同
1 tuple1 = (1, 2, 3, 4, 5) 2 print(tuple1.index(3))
2)count()
统计某个数据在当前元组出现的次数
1 tuple1 = (1, 2, 3, 4, 5) 2 print(tuple1.count(3))
3)len()
统计元组中数据的个数
1 tuple1 = (1, 2, 3, 4, 5) 2 print(len(tuple1))
2.修改
元组内的直接数据如果修改则立即报错,但如果元组内有列表,修改列表里面的数据则是支持的
1 tup = (1, 2, 3, 4, 5) 2 print(tup[1]) 3 print(tup[1:3]) 4 # tup[1] = 'asd' # TypeError: 'tuple' object does not support item assignment 5 6 tup = (1, 2, [1, 2, 3, 4], 4, 5) 7 tup[2][1] = 'aaa' 8 print(tup)
3.删除
del 当创建的元组不再使用,可以通过del关键字将其删除
1 tup = (1, 2, 3, 4, 5) 2 del tup
4.列表与元组的区别
列表是动态数组,它们可变且可以重设长度(改变其内部元素的个数)
元组是静态数组,他们不可变,且其内部数据一旦创建则不可改变
元组缓存于python运行时环境,意味着每次使用元组时无须访问内核去分配内存
三、可变数据类型与不可变数据类型
可变数据类型:当该数据类型的对应变量的值发生了改变,那么它对应的内存地址不发生改变,对于这种数据类型,就称为可变数据类型
不可变数据类型:当该数据类型的对应变量的值发生了改变,那么它对应的内存地址也发生改变,对于这种数据类型,就称为不可变数据类型
1 b = 'a' 2 print(b, id(b)) 3 b = b.upper() 4 print(b, id(b)) 5 # 列表 6 li = [1, 2, 3, 4, 5] 7 print(li, id(li)) 8 li.append(6) 9 print(li, id(li)) 10 11 # 可变数据类型:列表list、字典dict、集合set 12 # 不可变数据类型:字符串str、数值int/float/...、元组tuple 13 # 当修改某个东西时 内存不会改变 说明这个东西是可变的 可变的数据类型 14 # 当修改某个东西时 内存会改变 说明这个东西是不可变不能够进行修改 不可变的数据类型
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)