变量可以存储数据,但是一个变量只能存储一个数据,现在有一个班级,班级有20个人,现在求班级的平均年龄。
若按照之前的方式来解决
age1 = 10 age2 = 12 ... age20 = 12 average = (age1 + age2 +...+age20)/20在这里,很显然这种方法显得很麻烦,而python提供了一种解决方案,就是使用列表
本质:list列表的本质是一种有序的集合
语法: 列表名 = [元素1,元素2,元素3…说明:列表中的选项被称为元素,跟string类似,下标也是从0开始计数
使用:创建列表
#创建空列表 list1 = [] #创建带有元素的列表 list2 = [10, 20, 30, 10] print(list2)在列表中元素的数据类型可以不同(灵活性)
list3 = [33, "good", True, 10.32] print(list3)功能:访问list列表中元素值
语法:列表名[索引]
list4 = [22, 33, 12, 32, 45] #下标从0开始,最大值为len(list4)-1 print(list4[0])注意:当索引值大于len(list4)-1的时候,会出现以下错误:
print(list4[5]) IndexError: list index out of range这个错误就是下标越界【下标超出了可表示的范围】
功能:更改列表元素的值
语法:列表名[下标] = 值
list4 = [22, 33, 12, 32, 45] list4[0] = "hello" print(list4[0])语法: 列表3 = 列表1 + 列表2
list1 = [1, 2, 3] list2 = ['hello', 'yes', 'no'] list3 = list1 + list2 print(list3)语法: 列表2 = 列表1 * n
list1 = [1, 2, 3] list2 = list1 * n print(list2)语法:元素 in 列表
若存在则返回True,否则返回False
list1 = [1, 2, 3] print(1 in list1)语法:列表[start: end] 表示获取从开始下标到结束下标的所有元素[start, end)
list1 = [1, 2, 3, 'hello', 'yes', 'no'] print(list1[2:4]) #若不指定start,则默认从0开始截取,截取到指定位置 #若不指定end,则从指定位置开始截取,截取到末尾结束语法:列表 =[列表1,列表2,列表3,… ,列表n]
#创建二维列表,即列表中的元素还是列表 list1 = [[1, 2, 3],[2, 3, 4],[5, 4, 9]]二维列表取值
语法:列表名【下标1][下标2]
注意:下标1代表第n个列表(下标从0开始),下标2代表第n个列表中的第n个元素
list1 = [[1, 2, 3],[2, 3, 4],[5, 4, 9]] print(list1[0][0])功能:在列表中末尾添加新的元素【在原本的列表中追加元素】
注意:append()中的值可以是列表也可以是普通元素
>>> list1 = [3, 4, 6] >>> list1.append(6) >>> print(list1) [3, 4, 6, 6]功能:在列表的末尾一次性追加另外一个列表中的多个值
注意:extend()中的值只能是列表/元组[一个可迭代对象],不能是元素
能够写在for循环后的对象称为可迭代对象
>>> list1 = [1,2,3] >>> list2 = [3, 4,5] >>> list1.extend(list2) >>> print(list1) [1, 2, 3, 3, 4, 5]功能:在下标处插入元素,不覆盖原本的数据,原数据向后顺延
注意:插入的数据可以是元素也可以为列表
>>> list1 = [1,2,3] >>> list1.insert(1,0) >>> print(list1) [1, 0, 2, 3] >>> list1.insert(1,[2, 4, 8]) >>> print(list1) [1, [2, 4, 8], 0, 2, 3]功能:移除列表中指定下标处的元素(默认移除最后一个元素),并返回移除的数据
>>> list1 = [1, [2, 4, 8], 0, 2, 3] >>> list1.pop() 3 >>> print(list1) [1, [2, 4, 8], 0, 2] >>> list1.pop(2) 0 >>> print(list1) [1, [2, 4, 8], 2]功能:移除列表中的某个元素第一个匹配结果,若找不到,则报错
>>> list1 = [1, 2, 3] >>> list1.remove(2) >>> print(list1) [1, 3]功能:清除列表中所有的数据
>>> list1 = [1, 2, 3] >>> list1.clear() >>> print(list1) []功能:从指定的范围的列表中找出某个值第一匹配的索引值
若不指定范围,则默认是整个列表。
>>> list1 = [1, 2, 3] >>> list1.index(2) 1 >>> list1.index(4) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: 4 is not in list注意:若在列表中找不到这个元素,则会报错。
功能:查看元素在列表中出现的次数
>>> list1 = [1, 2, 3, 1] >>> list1.count(1) 2功能: 获取元素列表个数
>>> list1 = [1, 2, 3, 1] >>> len(list1) 4语法:获取列表中的最大值
>>> list1 = [1, 2, 3, 1] >>> max(list1) 3语法:获取列表中的最小值
>>> list1 = [1, 2, 3, 1] >>> min(list1) 1语法: 列表倒叙
>>> list1 = [1, 2, 3, 1] >>> list1.reverse() >>> print(list1) [1, 3, 2, 1]语法:列表排序 默认升序
>>> list1 = [1, 2, 3, 1] >>> list1.sort() >>> print(list1) [1, 1, 2, 3]功能:将元组转为列表
>>> list1 = list((1, 2, 3, 4)) >>> print(list1) [1, 2, 3, 4]语法:list1 = [1, 2, 3]
list2 = list1 >>> list1 = [1, 2, 3, 1] >>> list2 = list1 >>> print(list2) [1, 2, 3, 1] >>> print(id(list1)) 4314476424 >>> print(id(list2)) 4314476424 所属同一块内存空间注意:赋值拷贝为引用拷贝,类似于快捷方式
语法:
list1 = [1, 2, 3] list2 = list1.copy() >>> list1 = [1, 2, 3, 1] >>> list2 = list1.copy() >>> print(list2) [1, 2, 3, 1] >>> print(id(list2)) 4314525320 >>> print(id(list1)) 4314524808 浅拷贝开辟了新的内存空间赋值拷贝,浅拷贝与深拷贝
赋值拷贝[引用拷贝] 特点:拷贝出来的新的列表与原本列表,他们两个共用同一块内存, 若列表发生变化,则同时进行改变.
list1 = [1,2,3,4,[1,2,3]] list2 = list1 print(list1) # 输出结果 [1, 2, 3, 4, [1, 2, 3]] print(list2) # 输出结果 [1, 2, 3, 4, [1, 2, 3]] print(id(list1)) # 输出结果 2329447376520 print(id(list2)) # 输出结果 2329447376520 list2[-1][-1] = 1 print(list2) # 输出结果 [1, 2, 3, 4, [1, 2, 1]] print(list1) # 输出结果 [1, 2, 3, 4, [1, 2, 1]] print(id(list1)) # 输出结果 2329447376520 print(id(list2)) # 输出结果 2329447376520 list2[-1] = "hello" print(list2) # 输出结果 [1, 2, 3, 4, 'hello'] print(list1) # 输出结果 [1, 2, 3, 4, 'hello'] print(id(list1)) # 输出结果 2329447376520 print(id(list2)) # 输出结果 2329447376520浅拷贝 特点:对于一维列表,会开辟新的内存空间,拷贝出来的新的列表与原本的列表id并不相同, 但是这仅限于一维列表.这种拷贝方式是一种不完全拷贝. 若出现二维列表,有可能仍然会出现共用内存的情况.
list1 = [1,2,3,4,[1,2,3]] list3 = list1.copy() print(list1) # 输出结果 [1, 2, 3, 4, [1, 2, 3]] print(list3) # 输出结果 [1, 2, 3, 4, [1, 2, 3]] print(id(list1)) # 输出结果 1975663482504 print(id(list3)) # 输出结果 1975663504008 list3[0] = 2 print(list1) # 输出结果 [1, 2, 3, 4, [1, 2, 3]] print(list3) # 输出结果 [2, 2, 3, 4, [1, 2, 3]] print(id(list1)) # 输出结果 1975663482504 print(id(list3)) # 输出结果 1975663504008 list3[-1][-1] = "good" print(list1) # 输出结果 [1, 2, 3, 4, [1, 2, 'good']] print(list3) # 输出结果 [2, 2, 3, 4, [1, 2, 'good']] print(id(list1)) # 输出结果 1975663482504 print(id(list3)) # 输出结果 1975663504008深拷贝 特点:是一种完全拷贝,它重新递归开辟一块新的内存空间,若出现多维列表的情况下, 多维列表的内存也会重新复制一份.新的列表与原列表不会出现共用内存的情况.
list1 = [1,2,3,4,[1,2,3]] list4 = copy.deepcopy(list1) print(list1) # 输出结果 [1, 2, 3, 4, [1, 2, 3]] print(list4) # 输出结果 [1, 2, 3, 4, [1, 2, 3]] print(id(list1)) # 输出结果 1968912750216 print(id(list4)) # 输出结果 1968912771720 list4[0] = 5 print(list1) # 输出结果 [1, 2, 3, 4, [1, 2, 3]] print(list4) # 输出结果 [5, 2, 3, 4, [1, 2, 3]] print(id(list1)) # 输出结果 1968912750216 print(id(list4)) # 输出结果 1968912771720 list4[-1][-1] = "nice" print(list1) # 输出结果 [1, 2, 3, 4, [1, 2, 3]] print(list4) # 输出结果 [5, 2, 3, 4, [1, 2, 'nice']] print(id(list1)) # 输出结果 1968912750216 print(id(list4)) # 输出结果 1968912771720语法:
for 变量名 in 列表 :
功能:for循环主要用于遍历列表
遍历:指的是依次访问列表中的每一个元素,获取每个下标对应的元素值
说明:按照顺序获取列表中的每个元素,赋值给变量名,再执行语句,如此循环往复,直到取完列表中所有的元素为止
>>> list1 = ['hello', 78, '你好', 'good'] >>> for item in list1: ... print(item) ... hello 78 你好 good语法:
下标 = 0
while 下标 < 列表的长度:
语句 下标 += 1 >>> list1 = ['hello', 78, '你好', 'good'] >>> index = 0 >>> while index < len(list1): ... print(list1[index]) ... index += 1 ... hello 78 你好 good语法:
for 下标,变量 in enumerate(列表)
语句 >>> list1 = ['hello', 78, '你好', 'good'] >>> for index,item in enumerate(list1): ... print(index, item) ... 0 hello 1 78 2 你好 3 good enumerate()[枚举]函数用于一个可遍历的数据对象(如列表,元组或者字符串)组合为一个索引序列,同时列出数据与数据下标,一般使用在for循环中 enumerate(obj, [start =0]) obj:一个可迭代对象 start:下标起始位置拓展
在python中双冒号的使用:
我们之前学过list1[:]是对list1进行切片,但是若是出现list1[::]
这个有什么作用呢?
#在python中使用list1[::]参数如下[start:end:step] ''' start:指定开始截取的位置 end:指定截取结束的位置 step:指定步长 ''' list1 = [1,2,3,4,5] #当step=-1的时候,情况会特殊一点,它可以进行列表的反转 list2 = list1[::-1]