一、列表【重点掌握】
1.概念
变量:使用变量存储数据,但是,缺点:一个变量每次只能存储一个数据 ,num = 10 name = “aaa”
思考:如果一次性存储多个数据,怎么做?
实际问题:存储5个人的年龄,求他们的平均年龄,按照以前的方式解决:
age1 = 10 age2 = 18 age3 = 9 age4 = 15 age5 = 20 average = (age1 + age2 + age3 + age4 + age5) / 5
继续思考:如果要存储100,甚至1000个人的年龄呢?
解决方案:此时采用定义变量的方式会显得很麻烦,而Python提供了一种解决方案,使用列表进行多个数据的存储
作用:列表相当于是一个容器,可以同时存储多种类型的数据
本质:列表是一个有序的,可以存储重复元素的集合
说明:有序指的就是有顺序【数据的存放的顺序和底层存储的顺序是相同的】
# 1.变量 # 定义变量的过程就是在内存中开辟空间的过程 age = 10 """ 工作原理: a.内存空间根据用途被划分为不同的区域,包括:栈,堆,方法区,静态域 b.age = 10,age会占用栈空间,10会占用堆空间 """ age1 = 10 age2 = 18 age3 = 9 age4 = 15 age5 = 20 # 2.列表 numlist = [10,18,9,15,20] """ 作用:列表相当于是一个容器,可以同时存储多种类型的数据 本质:列表是一个有序的,可以存储重复元素的,可以存储不同类型数据的,可变的集合 说明:有序指的就是有顺序【数据的存放的顺序和底层存储的顺序是相同的】 """
2.基本使用
2.1定义列表
定义一个列表相当于定义一个列表类型的变量
变量名 = 值
语法:列表名 = [数据1,数据2,数据3…]
说明:
a.列表名其实就是一个变量名【标识符】,注意:尽量不要直接使用list【系统有一个功能list(x)】,使用listxxx
b.[]是列表特有的表示方式
c.数据1,数据2,数据3被称为元素
d.列表中的元素会被自动编号,从0开始,该编号被称为索引,下标或者角标
e.索引的取值范围:0 ~ (元素个数 - 1)
-1 ~ -元素个数
# 1.定义一个空列表 # 注意1:列表的命名不要直接使用list,原因:系统有一个功能为list() list1 = [] print(list1) # 2.定义一个非空的列表 # 注意2:列表是有序的,数据的存放的顺序和底层存储的顺序是相同的 # 注意3:列表中允许重复元素存在 list2 = [2,3,3,4,3,3] print(list2) # 注意4:同一个列表中可以同时存储不同类型的数据 list3 = ["a",True,45,46.67,[45,6,7]] print(list3) list4 = ['aaa','gagag','hello'] print(list4)
2.2列表元素访问
# 1. list1 = [10,20,30] # 10,20,30被称为元素 # 注意1:但凡一个数据类型中的元素是有序的,则该数据类型都有索引/下标 # 注意2:像列表这种有序的数据类型,如果要获取其中的元素,则可以通过索引获取 # 2.获取元素,语法:列表名[索引] list2 = [11,22,33,44,55,66] # 获取整个列表,list2是一个变量名【引用】,指向存储了指定数据的列表,其中存储了列表的地址 print(list2) # 获取列表中的第1个元素,list2[1]相当于是一个引用,指向列表中的22数据,其中存储了22的地址 print(list2[1]) print(id(list2[1])) print(id(22)) # 3.索引的取值范围 list3 = [11,22,33,44,55,66] # 注意3:索引可以表示为正数或者负数,取值范围:0~长度 - 1 或者 -1~ - 长度 """ 正索引 0 1 2 3 4 5 负索引 -6 -5 -4 -3 -2 -1 11,22, 33,44,55,66 """ print(list3[5]) print(list3[-1]) print(list3[0]) print(list3[-6]) # 注意4:访问列表元素的时候,一定要注意索引的取值范围,否则会导致索引越界 # print(list3[10]) # IndexError: list index out of range # print(list3[-8]) # IndexError: list index out of range # 4.修改列表中的元素 # 注意5:列表是可变的,其中的元素可以随时增加,删除或修改 list4 = [11,22,33,44,55,66] print(list4) list4[1] = 100 print(list4)
2.3列表基本操作
# 1.+,两个列表可以使用+进行元素的整合,会生成一个新的列表,对原列表没有任何影响 list1 = [3,4,5] list2 = ['a','b','c'] print(list1 + list2) print(list2 + list1) print(list1) print(list2) # 2.*,将一个列表中的元素重复指定的次数,生成一个新的列表,对原列表没有任何影响 print(list1 * 3) print(list1) # 3.in和not in:判断元素在列表中是否存在 print(2 in list1) print(2 not in list1) print(4 in list1) print(4 not in list1) # 4.遍历列表 # 遍历:依次获取一个列表中的所有元素 list3 = [11,22,33,44,55,66] # print(list3[0]) # print(list3[1]) # print(list3[2]) # print(list3[3]) # print(list3[4]) # print(list3[5]) # 方式一:for,直接获取元素 ***** for n1 in list3: print(n1) # 方式二:for,获取索引 ***** for i in range(len(list3)): print(i,list3[i]) # 方式三:while a = 0 while a < len(list3): print(a,list3[a]) a += 1 # 方式四:enumerate() ****** # 枚举:其中的数据是以索引和数据的映射关系存储的 # print(list(enumerate(list3))) # num1,num2 = (34,56) # print(num1,num2) # for r in enumerate(list3): # print(r[0],r[1]) for index,num in enumerate(list3): print(index,num) # 练习1:获取下面列表中为奇数的元素 list1 = [11,22,33,44,55,66] for m in list1: if m % 2 == 1: print(m) # 练习2:获取下面列表中索引为奇数的元素 list1 = [11,22,33,44,55,66] for i in range(len(list1)): if i % 2 == 1: print(list1[i])
3.系统功能
函数 说明 len(list) 获取列表元素个数 max(list) 返回列表元素最大值 min(list) 返回列表元素最小值 list(seq) 将元组转换为列表 list.append(obj) 在列表末尾添加新的对象 list.count(obj) 统计某个元素在列表中出现的次数 list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) list.index(seq) 从列表中找出某个值第一个匹配项的索引位置 list.insert(index,obj) 将对象插入列表 list.pop(index) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 list.remove(obj) 移除列表中某个值的第一个匹配项 list.reverse() 反向列表中元素 list.sort(key=None,reverse=False) 对原列表进行排序 list.copy() 复制列表 list.clear() 清空列表
3.1增
# 1.append(),追加,在已知列表的末尾追加一个元素 ******* list1 = [11,22,33] print(list1) # 追加单个元素 list1.append(44) print(list1) # 追加多个元素,注意:只能通过容器的方式进行追加,但是,整个容器整体会被添加到列表中 # list1.append(55,66,77) # TypeError: append() takes exactly one argument (3 given) list1.append([55,66,77]) print(list1) print("*" * 30) # 2.extend(),扩展,在已知列表的末尾添加元素 list1 = [11,22,33] print(list1) # 追加单个元素 # 注意1:可迭代对象包括的数据类型有:list tuple dict set str等 # 注意2:通过extend向列表中添加元素,只能添加可迭代对象 # list1.extend(44) # TypeError: 'int' object is not iterable整型不是可迭代对象 # 注意3:通过extend向列表中添加一个可迭代对象,只会讲可迭代对象中的元素添加到列表【打碎加入】 list1.extend([44]) print(list1) list1.extend([55,66,77]) print(list1) print("*" * 30) # 3.insert(),插入,在列表指定位置插入指定元素 list1 = [11,22,33] print(list1) # 追加单个元素 list1.insert(1,100) print(list1) # [11, 100, 22, 33] list1.insert(2,[55,66,77]) print(list1) # [11, 100, [55, 66, 77], 22, 33] # 【面试题】通过append或extend向列表中添加元素,有何不同?
3.2删
# 1.remove(),移除 ****** # 特点:直接移除元素,但是,执行一次remove只能移除一个指定元素 list1 = [11,22,33,44,22,22,22,55] print(list1) list1.remove(22) print(list1) list1.remove(22) print(list1) r1 = list1.remove(22) print(list1) r2 = list1.remove(22) print(list1) print(r1,r2) print("*" * 30) # 2.pop(index),弹出,index可以省略 # 特点:如果省略index,默认删除最后一个元素,如果未省略index,则删除指定索引处的元素 # pop可以将被删除的元素返回 list1 = [11,22,33,44,22,22,22,55] print(list1) r1 = list1.pop() print(list1) r2 = list1.pop(3) print(list1) print(r1) print(r2) # 3.clear(),清除 list1 = [11,22,33,44,22,22,22,55] print(list1) list1.clear() print(list1) # [] # 问题: list1 = [11,22,33,44,22,22,22,55] list1.clear() # [] del list1
3.3改
# 注意:reverse()和sort()都是在原列表的基础上直接修改的 # 1.reverse():反转/翻转 ***** list1 = [11,22,33,44] print(list1) list1.reverse() print(list1) # 2.sort():排序,分为升序和降序,默认为升序 ***** # a.升序 list1 = [2,4,5,7,100,5,45,29] print(list1) list1.sort() print(list1) # b.降序 # 方式一 list1 = [2,4,5,7,100,5,45,29] print(list1) list1.sort() list1.reverse() print(list1) # 方式二 list1 = [2,4,5,7,100,5,45,29] print(list1) list1.sort(reverse=True) print(list1) # c.key自定义排序规则 # 注意:字符串排序,依据的是ASCII码表 list2 = ['faaga','gag','64w5375','hellobab','aghuaakg'] # list2.sort() # print(list2) # 依据字符串的长度排序 list2.sort(key=len) print(list2)
3.4查
# 1.len():获取列表的长度 或者 获取列表中元素的个数 ****** list1 = [34,4,6,5,7,8,8] print(len(list1)) # 2.min()/max():求列表中的最值 print(max(list1)) print(min(list1)) # 3.count():统计一个元素在列表中出现的次数 ***** list1 = [34,4,6,8,8,8,8,5,7,8,8] print(list1.count(8)) print(list1.count(4)) # 4.index():获取一个元素在列表中第一次出现的索引 ****** list1 = [34,4,6,8,8,8,8,5,7,8,8] print(list1.index(8)) # print(list1.index(100)) # ValueError: 100 is not in list # 5.list() print(list("hello")) print(list(range(10)))