列表和元组
1.列表的定义
定义: 能装对象的对象
在python中使用 []来描述列表, 内部元素用逗号隔开. 对数据类型没有要求
lst = ["光头强", 1, True, {}, (1, ), {123}, ["周杰伦",[], "周杰", "结论"]] print(lst)
列表存在索引和切片. 和字符串是一样的.
lst = ["天龙八部", "西游记", "红楼梦", "银平煤", "绿平煤"] print(lst[3]) print(lst[-3]) print(lst) print(lst[1:4]) # 切片,原来是什么类型. 得到的就是什么类型 print(lst[-1::-2]) # 倒着切
2.相关的"增删改查"操作 (这里重点!!!敲黑板!!!!!)
添加:
①append() 追加, 在后面添加
② insert(位置,元素) 插入指定元素, 按照索引添加
③expend 迭代添加, 把传递进去的参数进行迭代,把每一项添加到列表的末尾
lst = ["凡人修仙传", "诛仙", "神墓"] # 添加 append() 追加. 在后面添加 lst.append("看见") lst.append("追风筝的人") # 插入 insert(位置, 元素), 效率相对比较低 lst.insert(1, "琴帝") # 迭代添加, 把传递进去的参数进行迭代. 把每一项添加到列表的末尾 lst.extend(["胡辣汤","猪蹄子", "猪头肉", "五花肉"]) print(lst)
删除:
①pop(索引) 根据索引删除, 默认从后往前删
②remove(元素) 根据元素删除, 当元素不存在时就会报错
③del 例:del lst[::2] 用切片或者索引删除,不常用!!!
④clear 例: lst:clear 清空!
修改:
索引修改
lst[索引] = 元素
lst = ["苏秦", "武大", "武二", "宝元", "李诞", "池子", "王建国"] lst[3] = "松江" # 通过索引修改 index out of range 索引下标越界# # print(lst) lst[1:3] = ["麻花藤"] # 迭代更新(不常用) print(lst) lst[1:5:2] = ["麻花藤", "码云"] # 坑: 如果步长不是1. 元素的个数必须要和切片的个数一致 print(lst)
查询:
for循环
lst = ["jay", "wlh", "lzw", "wf"] for item in lst: # item是lst中的每一项 print(item) for i in 123: # 'int' object is not iterable print(i)
3.列表的嵌套
多个列表互相嵌套.
lst = [["张艺谋", "冯小刚", "陈凯歌"], ["李安", "王家卫", "王晶"], ["周杰伦",["abc", "alex_wusir", ["胡辣汤", "c"]], "风扇哥"]] print(lst[1][1][2]) # 把王晶换成"贾樟柯" lst[1][2] = "贾樟柯" print(lst) # 降维操作 ["哈哈", "hehe", "houhou"] 一维 [[1,2,3], [12,4,5], [6,7,8]] 二维 # 数数 lst[2][1][1] = lst[2][1][1].replace("_", "$") print(lst)
4.列表的其他操作
①count() 计数
lst = ["太白", "太白", "太黑", "日天", "女神", "alex", "太白"] print(lst.count("太白")) # 查看xxx元素出现的次数
②sort() 排序 reverse = True
lst = [1, 8,12,22,1,1,2,33,4,5] lst.sort() # 排序. 默认升序 lst.sort(reverse=True) # reverse 反向, 降序 print(lst)
③reverse() 翻转
lst = ["赤木", "樱木花道", "流川枫", "三井"] lst.reverse() # 把列表翻转 print(lst)
④len() 求长度
lst= [1,2,3,4,5,"胡辣汤"] print(len(lst)) # 查看列表中元素的个数 list # 按住ctrl +鼠标左键
5. 元组
能装对象的对象. 不可变, 一旦确认好, 不可更改.
只读列表
可以迭代
# 元组用()表示, 只读列表. 冯提莫 # tu = ("DNF", "LOL", "王者荣耀", "QQ飞车", "炫舞", {}, tuple(), []) # print(tu) # # tu[1] = "呵呵" # 'tuple' object does not support item assignment # print(tu) # 元组也有索引和切片 # print(tu[3:5]) # print(tu[3:7:2]) # 元组有坑 # 空元祖 # tu = tuple() # 固定写法 # 元组中如果只有一个元素 # tu = (1) # 不是元组 <class 'int'> # tu = (1, ) # 这个是元组 <class 'tuple'> # print(type(tu)) # 好习惯: 写元组的时候末尾加个逗号 # tu = ("锅包肉", "酸菜炖粉条+五花肉", "红烧鲤鱼", "红烧肉") # # 元组也是可迭代的 # for item in tu: # 可以使用for循环 # print(item) tu = (1, "哈哈", "胡辣汤", ["忍者", "神龟"]) # tu[1] = "呵呵" # 元组不可变 tu[3] = ["我是新列表"] # 改变了指向. 报错 tu[3].append("孙悟空") # 元组没改. 该的是元素内部 没有改变元组的指向. 不报错 print(tu)
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] 元素
参考:
# i = 1 # while i <=100: # print(i) # i += 1 # range(参数) [0,参数) # for i in range(20): # range()可以被迭代 0-9 # print(i) # range(参数1, 参数2) [参数1, 参数2) 切片 # for i in range(10, 20): # print(i) # range(参数1, 参数2, 参数3) [参数1, 参数2) 每隔参数3个位置取一个 # for i in range(10, 20, 3): # print(i) # lst = ["周杰伦", "动画城", "大风车", "随便加", "宝宝", "孟孟", "萌萌", "孟萌"] # for item in lst: # 只能拿到元素. 获取不到索引 # print(item) # for i in range(len(lst)): # i就是索引 lst[i]元素 # print(i, lst[i])
思考题.
有如下列表
li = [1, 3, 4, "alex", [3, 7, 8, "TaiBai"], 5, "RiTiAn"]
循环打印列表中的每个元素,遇到列表则再循环打印出它⾥⾯的元素。
li = [1, 3, 4, "alex", [3, 7, 8, "TaiBai"], 5, "RiTiAn"] for i in li: if type(i) == list: for a in i: if type(a) == str: print(a.lower()) continue print(a) elif type(i) == str: print(i.lower()) else: print(i)