列表
为什么需要列表
如果要存储多个同类数据(比如全班同学名字),单独定义一个个变量非常麻烦,列表可以一次性存放多个数据;
其他语言里叫数组,Python 里叫
list,列表是可变类型列表定义
- 语法:
列表变量 = [元素1, 元素2, 元素3, ...]- 特点:
(1)元素可以是不同数据类型(字符串、数字、布尔都可以放一起)
(2)有序,靠索引下标访问,下标从 0 开始list1=['apple','banana','pineapple'] print(list1) print(type(list1)) ''' ['apple', 'banana', 'pineapple'] <class 'list'> '''下标索引 和 切片
list1=['张三','李四','王五','赵六','田七'] #索引取值:取第三个元素(下标2) e=list1[2] print(e) # 王五 # 切片:list[起始:结束],取到结束前一位,左闭右开 es=list1[1:4] # 下标1 2 3 print(es) # ['李四', '王五', '赵六']列表遍历
遍历:把每个元素依次取出
- for 循环
list1 = ['张三', '李四', '王五', '赵六', '田七'] # for 循环 for e in list1: print(e)
- while 循环(靠下标遍历)
list1 = ['张三', '李四', '王五', '赵六', '田七'] i=0 while i<len(list1): print(list1[i]) i+=1列表四大操作:增、删、改、查
增操作
list1 = ['张三', '李四', 5, 10, True,False,5,'张三'] print(list1.index('李四')) # 1 print(list1.count('张三')) # 2 if 5 in list1: print(f"5出现了{list1.count(5)}次") #5出现了2次 else: print("不存在")增操作
- append 和 extend 区别:
append(tmp)是把整个 tmp 当成一个元素塞进去;extend(tmp)是拆开 tmp 一个个放进去list2=[7,5,3,9,10,2] list2.append(20) print(list2) #[7, 5, 3, 9, 10, 2, 20] tmp=[15,19,13] list2.extend(tmp) print(list2) # [7, 5, 3, 9, 10, 2, 20, 15, 19, 13] list2.insert(2,100) # 下标为2的位置插入100 print(list2) # [7, 5, 100, 3, 9, 10, 2, 20, 15, 19, 13]删操作
list2=[7,5,3,9,10,2] del list2[2] # 删掉指定下标的元素 print(list2) # [7, 5, 9, 10, 2] res=list2.pop() # 默认删末尾,拿到删掉的值 print(res) # 2 print(list2) #[7, 5, 9, 10] list2.remove(9) print(list2) # [7, 5, 10]改操作
list2 = [7, 5, 3, 9, 10, 2] list2[5]=4 print(list2) # [7, 5, 3, 9, 10, 4] list2.reverse() print(list2) # [4, 10, 9, 3, 5, 7] list2.sort(reverse=False) # 升序 print(list2) # [3, 4, 5, 7, 9, 10]列表嵌套(二维列表)
- 列表里面的元素,本身又是列表,相当于二维数组,适合存储分组数据
(多个班级、每个班级多名学生)students=[ ['张三','李四'], ['王五','赵六'], ['田七','钱八'] ] # 取值:先取外层下标,再取内层下标 print(students[0]) # ['张三', '李四'] print(students[1]) # ['王五', '赵六'] print(students[0][1]) # 李四 print(students[2][1]) # 钱八 # 嵌套遍历 for clas in students: for name in clas: print(name) # 张三 # 李四 # 王五 # 赵六 # 田七 # 钱八案例:相邻元素取最大值
需求:输入
[7,8,9,5,6,7,2,3],输出[8,9,9,6,7,7,3]逻辑:依次比较当前元素和下一个元素,把较大值存入新列表
list1=[7,8,9,5,6,7,2,3] res=[] i=0 while i<len(list1)-1: # 最后一个元素没有下一位,所以-1 if list1[i]>list1[i+1]: res.append(list1[i]) else: res.append(list1[i+1]) i+=1 print(res) #[8, 9, 9, 6, 7, 7, 3]总结
- 下标从 0 开始,不要越界(下标超出范围会报错)
index()/remove()找不到元素直接报错,建议先用in判断sort()只能对同类型可比较的列表排序,字符串和数字不能混排- 列表是可变对象:
append、extend、insert、del、pop、remove、reverse、sort
都是原地修改,大多没有返回值
元组的定义与使用
为什么需要元组
列表 list 可以存多个数据,但是可以修改里面元素
如果希望数据存放之后不允许被修改,就用元组 tuple
num_list = [10, 20, 30] num_list[0] = 100 # 列表可以修改元组的定义
符号:小括号 (),元素用逗号隔开
元素可以是不同数据类型
重点:只有一个元素的时候,后面必须加逗号,不然不是元组
# 多个元素元组 tuple1=(10,20,30) print(type(tuple1)) # <class 'tuple'> # 单个元素,逗号不能丢,丢了就不是元组了 tuple2=(1,) print(type(tuple2)) # <class 'tuple'> # 单个元素,没逗号时 tuple3=(1) print(type(tuple3)) # <class 'int'>元组的相关操作
元组是不可变类型:不能增、删、改元素,只有查询操作
tuple_1=('张三','李四','王五',5,10,15,5) # 索引取值 print(tuple_1[2]) # 王五 # 切片 print(tuple_1[2:5]) # ('王五', 5, 10) # 查找下标 print(tuple_1.index(10)) # 4 # 统计次数 print(tuple_1.count(5)) # 2 # 长度 print(len(tuple_1)) # 7 # 遍历元组(和列表一样,for循环) for e in tuple_1: print(e)
两个案例代码
- 案例 1:嵌套元组去重,提取唯一元素
tuple_1=( (1,2,3), (2,4,6), (2,3,5) ) list_res=[] # 外层循环,从tuple_1中取一个子元组 for tuple_e in tuple_1: # 内层循环,从子元组中取一个元素 for num in tuple_e: if num not in list_res: # 改元素不在列表中,则放入列表 list_res.append(num) print(list_res) # [1, 2, 3, 4, 6, 5]- 案例 2:统计元组里面奇数的个数
需求:元组 (1,2,3,4,5,6,7,8,9),数奇数数量