五、列表(list)
1、列表的介绍
列表:列表是Python的基础数据类型之⼀ ,其他编程语⾔也有类似的数据类型. 比如JS中的数
组, java中的数组等等. 它是以[ ]括起来, 每个元素⽤’ , '隔开⽽且可以存放各种数据类型:
例:
lst = ["嘿嘿", "吼吼", ["我是", "列表"], ("I'm", "tuple"), {"dict": "我是字典"}, {"set", "我是集合呀"}, 2]
列表相比于字符串可以存取更多类型的数据,而且可以存放大量的数据。列表是有序的,可以通过索引对列表进行切片取值等操作。
2、列表的索引和切片
列表和字符串一样拥有索引
lst = ["孙悟空", "猪八戒", "沙僧", "唐僧"]
print(lst[0]) # 孙悟空
print(lst[1]) # 猪八戒
print(lst[2]) # 沙僧
print(lst[3]) # 唐僧
lst[0] = "齐天大圣" # 注意:列表是可变类型,可以直接发生改变,和字符串不一样哈
print(lst) # ["齐天大圣", "猪八戒", "沙僧", "唐僧"]
temp = "天蓬元帅"
temp[0] = "地"
print(temp) # TypeError: 'str' object does not support item assignment (不可变类型)
列表的切片
lst = ["孙悟空", "猪八戒", "沙僧", "唐僧"]
print(lst[0:2]) # ["孙悟空", "猪八戒", "沙僧"]
print(lst[::2]) # ["孙悟空", "沙僧"]
print(lst[::-1]) # ['唐僧', '沙僧', '猪八戒', '孙悟空']
print(lst[-1:1:-1]) # ["唐僧", "沙僧"]
3、列表的增删该查
注意:列表是可变类型,所以可以直接对列表中的元素进行操作。
增
lst = ["name", "age", "job", "hobby"]
lst.append("gender")
print(lst) # ["name", "age", "job", "hobby", "gender"]
lst = ["name", "age", "job", "hobby"]
lst.insert(1, "gender")
print(lst) # ["name", "gneder", "age", "job", "hobby"] 按照索引进行插入
lst = ["name", "age", "job", "hobby"]
lst.extend(["gender", "salary"])
print(lst) # ["name", "age", "job", "hobby", "gender", "salary"] 将可迭代对象进行迭代添加
lst = ["name", "age", "job", "hobby"]
lst.extend("hello")
print(lst) # ['name', 'age', 'job', 'hobby', 'h', 'e', 'l', 'l', 'o']
删
lst = ["鬼剑士", "神枪手", "召唤师", "圣职者", "格斗家"]
ret1 = lst.pop() # 默认删除列表最后一个元素,并且可以取得被删除的元素的值
ret2 = lst.pop(1) # 也可以指定索引删除
print(ret1) # 格斗家
print(ret2) # 神枪手
print(lst) # ["鬼剑士", "召唤师", "圣职者"]
lst = ["鬼剑士", "神枪手", "召唤师", "圣职者", "格斗家"]
lst.remove("圣职者") # 指定列表中的元素名称进行删除,删除不存在的元素会报错
print(lst) # ["鬼剑士", "神枪手", "召唤师", 格斗家"]
lst = ["鬼剑士", "神枪手", "召唤师", "圣职者", "格斗家"]
del lst[2] # 使用del删除指定的列表元素,只能使用索引或者切片进行删除
print(lst) # ["鬼剑士", "神枪手", "圣职者", "格斗家"]
lst = ["鬼剑士", "神枪手", "召唤师", "圣职者", "格斗家"]
lst.clear() # 清空列表
print(lst) # []
改
lst = ["马云", "马化腾", "马良", "马蓉", "马克思"]
lst[1] = "麻花藤"
print(lst) # ["马云", "麻花藤", "马良", "马蓉", "马克思"]
lst = ["马云", "马化腾", "马良", "马蓉", "马克思"]
lst[1:4] = "hello"
print(lst) # ["马云", "h", "e", "l", "l", "o", "马克思"]
查
列表是一个可迭代对象,所以可以使用for循环查询
for ele in list:
print(i)
其它操作
# 计算"行者孙"在列表中出现的次数
lst = ["孙行者", "行者孙", "者行孙", "行者孙"]
print(lst.count("行者孙")) # 2
# 计算列表的长度
lst = ["孙行者", "行者孙", "者行孙", "行者孙"]
print(len(lst)) # 4
# 对列表元素进行翻转
lst = ["孙行者", "行者孙", "者行孙", "行者孙"]
lst.reverse()
print(lst) # ["行者孙", "者行孙", "行者孙", "孙行者"]
# 对列表进行排序
lst = [10,2,45,64,4,16,8]
lst.sort() # 默认从小到大排序
print(lst) # [2, 4, 8, 10, 16, 45, 64]
lst.sort(reverse=True) # 加上参数reverse=True变成从大到小排序
print(lst2) # [64, 45, 16, 10, 8, 4, 2]
列表的嵌套
lst = [1, "夸父", "dogfa", ["jack ma", ["康帅博"], "麻辣干子"]]
# 找到"夸父"
print(lst[1])
# 找到“夸父“和”dogfa”
print(lst[1:3])
# 将"夸父“替换成”夸母”
lst[1] = lst[1].replace("父", "母")
print(lst)
# 将”jack ma“各个首字母大写
lst[3][0] = lst[3][0].title()
print(lst)
# 将”康帅博“替换成”康师傅“
lst[3][1][0] = lst[3][1][0].replace("帅博", "师傅")
print(lst)
# 将”dogfa“首字母大写
lst[2] = lst[2].capitalize()
print(lst)
循环删除列表中的元素(注意)
lst = ["鬼剑士", "神枪手", "召唤师", "圣职者", "格斗家"]
for i in lst:
lst.remove(i)
print(lst) # ['神枪手', '圣职者']
# 为什么我们进行for循环时没有将列表中的元素全部删除?因为for循环每循环一次内部索引会加1,而删除了列表中的元素之后,后面的元素会前移,导致删除错乱。
# 第一次循环: ["神枪手", "召唤师", "圣职者", "格斗家"] 删除索引0对应的元素,后面的元素前移
# 第二次循环: ["神枪手", "圣职者", "格斗家"] 删除索引1对应的元素,后面的元素前移
# 第三次循环: ["神枪手", "圣职者"] 删除索引2对应的元素,后面的元素前移
# 解决办法1
for i in range(len(lst)):
lst.pop()
print(lst) # []
# 解决办法2
lst2 = []
for i in lst:
lst2.append(i)
for el in lst2:
lst.remove(el)
print(lst) # []
六、元祖(tuple)
元组: 俗称不可变的列表.⼜被成为只读列表, 元组也是python的基本数据类型之⼀, ⽤⼩括
号括起来, ⾥⾯可以放任何数据类型的数据, 查询可以. 循环也可以. 切片也可以. 但就是不能
改.
tu = ("name", "age", "gender")
print(tu) # ("name", "age", "gender")
print(tu[0]) # name
print(tu[2]) # gender
print(tu[0:2]) # 元祖切片之后还是元祖
# for循环遍历元祖
for ele in tu:
print(ele)
# 尝试修改元祖
tu[0] = "我就是要改变你" # TypeError: 'tuple' object does not support item assignment (元祖中的元素不支持被修改)
# 再次尝试修改元祖
tu = ("你改不了我的", [], "你也改不了我的", "我们中出了一个叛徒")
tu[1] = "我是叛徒" # 再次修改失败
tu[1].append("我是叛徒") # 修改成功
print(tu) # ("你改不了我的", ["我是叛徒"], "你也改不了我的", "我们中出了一个叛徒")
# 通过以上结论,我们可以得出:元祖的不可变指的是元祖内的子元素不可变,而子元素的子元素可不可变取决于是否是可变类型的对象。
# 注意:当元祖中只有一个元素时,必须在元素后面加上一个逗号,否则就不是元祖,例:tu = ("name",)
# 元祖同样含有len(), index(), count()方法。
未完待续