内容概要 1. 什么是列表 定义: 能装对象的对象 在python中使用[]来描述列表, 内部元素用逗号隔开. 对数据类型没有要求 列表存在索引和切片. 和字符串是一样的. 2. 相关的增删改查操作(重点) 添加:(记忆1,2) 1. append() 追加 2. insert(位置, 元素) 插入指定元素到指定位置 #3.extend(可迭代对象) 迭代添加 把传递进去的参数进行迭代,把每一项添加到列表的末尾 (这个了解) 删除:(记忆1,2) 1. pop(index) 根据索引删除 删除并返回索引项 2. remove(元素) 根据元素删除 删除第一次出现的指定元素,如果元素不存在则报错 #3.del 用切片或者索引删除 全局删除 不常用(是关键字???) #4.clear() 清空 修改: 索引修改 lst[索引] = 元素 坑: 如果步长不是1. 元素的个数必须要和切片的个数一致 查询: for循环.
1 # 列表 2 # lst = ["光头强", 1, True, {}, (1, ), {123}, ["周杰伦",[], "周杰", "结论"]] 3 # print(lst) 4 5 # 索引和切片 6 # lst = ["天龙八部", "西游记", "红楼梦", "银平煤", "绿平煤"] 7 # print(lst[3]) 8 # print(lst[-3]) 9 # print(lst)10 # print(lst[1:4]) # 切片,原来是什么类型. 得到的就是什么类型11 # print(lst[-1::-2]) # 倒着切12 13 14 # lst = ["凡人修仙传", "诛仙", "神墓"]15 # # 添加 append() 追加. 在后面添加16 # lst.append("看见")17 # lst.append("追风筝的人")18 #19 # # 插入 insert(位置, 元素), 效率相对比较低20 # lst.insert(1, "琴帝")21 #22 # # 迭代添加, 把传递进去的参数进行迭代. 把每一项添加到列表的末尾23 # lst.extend(["胡辣汤","猪蹄子", "猪头肉", "五花肉"])24 #25 # print(lst)26 27 28 # # 删除29 # lst = ["斗破苍求", "手机", "爵迹", "满城尽带黄金甲", "三生三世十里桃花"]30 #31 # # # pop() 默认从后往前删32 # # lst.pop()33 # # # pop(索引) 按照索引位置删除34 # # lst.pop(1)35 #36 # # remove(元素) 移除37 # # lst.remove("满城尽带黄金甲") # 当元素不存在的时候会报错38 #39 # # del lst[::2] # 用切片或者索引删除 不常用40 # lst.clear() # 清空.41 #42 # print(lst)43 44 # 修改45 # lst = ["苏秦", "武大", "武二", "宝元", "李诞", "池子", "王建国"]46 # # lst[3] = "松江" # 通过索引修改 index out of range 索引下标越界47 # # print(lst)48 # # lst[1:3] = ["麻花藤"] # 迭代更新(不常用)49 # # print(lst)50 # lst[1:5:2] = ["麻花藤", "码云"] # 坑: 如果步长不是1. 元素的个数必须要和切片的个数一致51 # print(lst)52 53 # lst = ["alex", "wusir", "胡辣汤"]54 # # 把列表中的wusir替换成大写 WUSIR55 # # 首先你要获取到2元素56 # # 变成大写57 # # 塞回去(必须要放回去)58 # lst[1] = lst[1].replace("wusir", "WUSIR")59 # print(lst)60 61 # 查询, 列表是一个可迭代对象62 # lst = ["jay", "wlh", "lzw", "wf"]63 # for item in lst: # item是lst中的每一项64 # print(item)65 66 # for i in 123: # 'int' object is not iterable67 # print(i)
1 #!/Users/liangyufeng/venv/bin/python3 2 # _*_ coding:utf-8 _*_ 3 4 # 列表是可变的数据类型,所有的操作直接对原来的列表进行操作 5 6 7 ##增加 8 lst = [1,2,3,4]#不要命名为 list,就像字符串不要命名为 str 9 lst[1:3]#切片 ,end 取不到,原来是什么类型,得到的就是什么类型10 lst[1:3:1] #也有步长,与字符串的切片是一样的11 12 #追加 append()追加,在末尾添加 重点13 lst.append('看见')14 lst.append('追风筝的人')15 16 #插入 insert() 效率相比 append 更低,因为插入位置之后的元素要往后面挪动 重点17 lst.insert(1,'琴帝')18 19 #迭代添加 把传递进去的参数进行迭代,把每一项添加到列表的末尾 了解20 lst.extend('华辣汤') #'华', '辣', '汤' 拆开添加进去21 lst.extend(['华辣汤']) #'华辣汤' 拿到每一个元素添加22 lst.extend([1])#ok23 # lst.extend(1)#报错TypeError: 'int' object is not iterable24 25 # lst.extend(1) #TypeError: 'int' object is not iterable 报错,说明只能传入可迭代对象26 27 28 29 # ##删除30 # lst = ["斗破苍求", "手机", "爵迹", "满城尽带黄金甲", "三生三世十里桃花"]31 # #pop()默认从后往前删 pop(索引)按照索引位置删除 删除并返回索引项32 # print(lst.pop())#默认从后往前删 返回 三生三世十里桃花 remove and return item at index (default last)33 # lst.pop(1)#按照索引位置删34 #35 # #remove(元素)移除 根据元素删除,删除第一次出现的该元素,如果元素不存在则报错remove first occurrence of value.36 # # print(lst.remove('斗破苍求'))#None 只移除,不返回值37 # # lst.remove('f')#移除 元素不存在会报错38 # print(lst)39 #40 # #del 全局删除 用切片或者索引删除41 # # del lst #此时print(lst)的结果是报错,NameError: name 'lst' is not defined,内存中都不存在这个lst变量了42 # # del lst[::2]#用切片或者索引删除 很少用43 # # del lst[5]#不存在也会报错44 #45 # # lst.clear()#清空 此时print(lst)的结果是[]46 # print(lst)47 #48 # #修改49 # # 索引修改: lst[索引] = 元素 一般是这样一对一的赋值修改50 # # 切片修改 lst[start:end:step] = 可迭代对象 坑: 如果步长不是1. 元素的个数必须要和切片的个数一致51 # ##一对一索引修改52 # lst = ["苏秦", "武大", "武二", "宝元", "李诞", "池子", "王建国"]53 # # lst[0] = '松江' #通过索引修改 下标越界会报错 index out of range54 # ##步长为1的切片修改 等号两边的索引位置和可迭代对象的元素数量不一致(前多后少或者前少后多都可以)没关系,都是都是等号后面的可迭代对象的全部元素占用等号左边切片给出的索引位置55 # # lst[1:3] = '麻花藤'#迭代更新(不常用) 索引位为2个,元素为3个-->索引1和2的位置被'麻', '花', '藤'占用 步长为1,56 # lst[1:3] = '麻'# 迭代更新(不常用) 索引位为2个,元素为1个-->索引1和2的位置被'麻'占用 步长为1,57 # ##步长不为1的切片修改58 # # lst[1:3:2] = '麻花藤'#迭代更新 报错:尝试将大小3的序列分配给大小1的扩展切片 步长不为1的话,前后必须一致59 # lst[1:5:2] = ['麻花藤','马云']#迭代更新 成功,左边2个位置,右边两个元素 步长不为1的话,前后必须一致(前面的位置必须和后面迭代后的元素个数是一致的)60 #61 # #练习 修改62 # # lst = ['alex','wusir','华辣汤'] #要求: 把列表中的wusir替换成大写 WUSIR63 # # # # 首先你要获取到2元素64 # # # # 变成大写65 # # # # 塞回去(必须要放回去)66 # # lst[1] = lst[1].upper()#必须要通过赋值的方式放回去,因为字符串是不可变的67 # # print(lst)68 #69 # #查询, 列表是一个可迭代对象70 # # lst = ["jay", "wlh", "lzw", "wf"]71 # # for item in lst: # item是lst中的每一项72 # # print(item)73 #74 # # for i in 123: # 'int' object is not iterable 要遍历的必须是一个可迭代对象,否则会报错75 # # print(i)76 #77 #78 79 print(lst)
3. 列表的嵌套 多个列表互相嵌套
1 lst = [["张艺谋", "冯小刚", "陈凯歌"], ["李安", "王家卫", "王晶"], ["周杰伦",["abc", "alex_wusir", ["胡辣汤", "c"]], "风扇哥"]] 2 # print(lst[1][1][2]) 3 4 # 把王晶换成"贾樟柯" 5 6 # lst[1][2] = "贾樟柯" 7 # print(lst) 8 # $$$$$$$ 9 # 降维操作 ["哈哈", "hehe", "houhou"] 一维 [[1,2,3], [12,4,5], [6,7,8]] 二维10 # 数数11 lst[2][1][1] = lst[2][1][1].replace("_", "$")12 print(lst)
4. 列表的其他操作 1. count() 计数 2. sort() 排序 reverse = True 3. reverse() 翻转 4. len() 求长度
1 # lst = ["太白", "太白", "太黑", "日天", "女神", "alex", "太白"] 2 # 3 # print(lst.count("太白")) # 查看xxx元素出现的次数 4 5 6 # lst = [1, 8,12,22,1,1,2,33,4,5] 7 # # lst.sort() # 排序. 默认升序 8 # lst.sort(reverse=True) # reverse 反向, 降序 9 # print(lst)10 11 # lst = ["赤木", "樱木花道", "流川枫", "三井"]12 # lst.reverse() # 把列表翻转13 # print(lst)14 15 # lst= [1,2,3,4,5,"胡辣汤"]16 # print(len(lst)) # 查看列表中元素的个数17 18 # list # 按住ctrl +鼠标左键查看源码
5. 什么是元组 能装对象的对象. 不可变. 一旦确认好. 不可更改 只读列表 可以迭代
1 # 元组用()表示, 只读列表. 冯提莫 2 # tu = ("DNF", "LOL", "王者荣耀", "QQ飞车", "炫舞", {}, tuple(), []) 3 # print(tu) 4 # # tu[1] = "呵呵" # 报错'tuple' object does not support item assignment 5 # print(tu) 6 7 # 元组也有索引和切片 8 # print(tu[3:5]) 9 # print(tu[3:7:2])10 11 # 元组有坑12 # 空元组13 # tu = tuple() # 固定写法14 # 元组中如果只有一个元素(括号不是元组的标志,逗号才是,有逗号就是元组)15 # tu = (1) # 不是元组16 # tu = (1, ) # 这个是元组 17 # print(type(tu))18 19 # 好习惯: 写元组的时候末尾加个逗号20 21 # tu = ("锅包肉", "酸菜炖粉条+五花肉", "红烧鲤鱼", "红烧肉")22 # # 元组也是可迭代的23 # for item in tu: # 可以使用for循环24 # print(item)25 26 27 tu = (1, "哈哈", "胡辣汤", ["忍者", "神龟"])28 # tu[1] = "呵呵" # 元组不可变29 tu[3] = ["我是新列表"] # 改变了指向. 报错30 tu[3].append("孙悟空") # 元组没改. 改的是元素内部 没有改变元组的指向. 不报错31 print(tu)32 33 tu = tuple()#空元组 的固定写法34 tu = (1)# 不是元组,是 int,这里的()当成数学上的小括号,类似于(1+1)35 tu = (1,)# 只有一个元素的时候,末尾必须加个逗号 此时才是元组36 #好习惯: 写元组的时候末尾加个逗号37 38 #可迭代 for39 #元祖的的不可变,是内部元素的指向不可变. 是元组对内部元素的指向不变,但是内部的可变元素的内部是可变的
6. 元组的嵌套 和列表一样.都可以互相嵌套. 元组的不可变: 指向不变 7. range(重点, 难点) 数数 range(n) 数学中的[0, n),前开后闭 range(m,n) [m, n) range(m,n,p) [m,n) 每隔p取一个 # 重点 for i in range(len(lst)): i 是索引 lst[i] 是元素
1 # i = 1 2 # while i <=100: 3 # print(i) 4 # i += 1 5 6 # range(参数) [0,参数) 7 # for i in range(20): # range()可以被迭代 0-9 8 # print(i) 9 10 # range(参数1, 参数2) [参数1, 参数2) 切片11 # for i in range(10, 20):12 # print(i)13 14 # range(参数1, 参数2, 参数3) [参数1, 参数2) 每隔参数3个位置取一个15 # for i in range(10, 20, 3):16 # print(i)17 18 # lst = ["周杰伦", "动画城", "大风车", "随便加", "宝宝", "孟孟", "萌萌", "孟萌"]19 20 # for item in lst: # 只能拿到元素. 获取不到索引21 # print(item)22 23 # for i in range(len(lst)): # i就是索引 lst[i]元素24 # print(i, lst[i])
8.
内容回顾小结:
1. list列表 写法:[元素, 元素] 对元素的数据类型没有要求 也有索引和切片 索引从0开始 切片 lst[start: end: step] 从start到end. 每隔step取一个 增删改查 1. 增加: 1. append() 追加. 在列表的末尾添加 2. insert(index, 元素) 在index位置插入元素 2. 删除: 1. pop(i) 默认从末尾删除, 还可以指定位置删除 ##返回删除的元素 2. remove(元素) 删除指定元素 3. 修改: 通过索引去修改元素 lst[3] = "胡辣汤" 4. 查询: for item in lst: # 拿不到索引 print(item) for i in range(len(lst)):##能拿到索引,当需要输出索引或者需要对原来的列表进行修改的时候(对原列表的修改一定要使用索引) print(i,lst[i]) range(m) 从0到m range(m, n) 从m到n range(m, n, p) 从m到n. 每P个取一个 for i in range(len(lst)): i 索引 lst[i] 元素 元组: 不可变的. 只读列表. 有索引. 有下标, 有切片. 不可变: 内部指向 可变的: list 不可变的:str, int, bool, tuple