python 基础 -04 基本数据类型(list,tuple)
⼀. 列表
1.1 列表的介绍
列表是python的基础数据类型之⼀ ,其他编程语⾔也有类似的数据类型. 比如JS中的数组, java中的数组等等. 它是以[ ]括起来, 每个元素⽤' , '隔开⽽且可以存放各种数据类型

列表相比于字符串. 不仅可以存放不同的数据类型. ⽽且可以存放⼤量的数据. 32位python可以存放: 536870912个元素, 64位可以存放: 1152921504606846975个元素.⽽且列表是有序的(按照你保存的顺序),有索引, 可以切⽚⽅便取值.
1.2 列表的索引和切片
列表和字符串⼀样也拥有索引:
lst = ["a", "b", "c", "d", "e"]
print(lst[0]) # 获取第⼀个元素
print(lst[1])
print(lst[2])
lst[3] = "f" # 注意. 列表是可以发⽣改变的. 这⾥和字符串不⼀样
print(lst) # ['a', 'b', 'c', 'f', 'e']
列表的切片:
lst = ["a", "b", "c", "d", "e"]
print(lst[0:3]) # ['a', 'b', 'c']
print(lst[:3]) # ['a', 'b', 'c']
print(lst[1::2]) # ['b', 'c'] #也有步⻓
print(lst[2::-1]) # ['c', 'b', 'a'] #也可以倒着取
print(lst[-1:-3:-2]) # 倒着带步⻓
⼆. 列表的增删改查
2.1. 增
注意, list和str是不⼀样的. lst可以发⽣改变. 所以直接就在原来的对象上进⾏了操作
lst = ["a", "b", "c", "d"]
print(lst)
lst.append("e")
print(lst)
lst = []
while True:
content = input("请输⼊你要录⼊的员⼯信息, 输⼊Q退出:")
if content.upper() == 'Q':
break
lst.append(content)
print(lst)
lst = ["a", "b", "c", "d"]
lst.insert(1, "e") # 在1的位置插⼊'e'. 原来的元素向后移动⼀位
print(lst)
# 迭代添加
lst = ["a", "b", "c"]
lst.extend(["d", "e"])
print(lst)
2.2. 删除
pop, remove, clear, del
lst = ["a", "b", "c", "d"]
print(lst)
deleted = lst.pop() # 删除最后⼀个
print("被删除的", deleted)
print(lst)
el = lst.pop(2) # 删除2号元素
print(el)
print(lst)
lst.remove("c") # 删除指定元素
# lst.remove("哈哈") # 删除不存在的元素会报错
# print(lst)
lst.clear() # 清空list
print(lst)
# 切⽚删除
del lst[1:3]
print(lst)
2.3. 修改
索引切片修改
# 修改
lst = ["a", "b", "c", "d", "e"]
lst[1] = "f" # 把1号元素修改成f
print(lst)
lst[1:4:3] = ["f", "g"] # 切⽚修改也OK. 如果步⻓不是1, 要注意. 元素的个数
lst[1:4] = ["hhhhhh"] # 如果切⽚没有步⻓或者步⻓是1. 则不⽤关⼼个数
print(lst)
2.4 查询
列表是⼀个可迭代对象, 所以可以进⾏for循环

2.5. 其他操作
lst = ["e", "d", "d", "e", "3", "c"]
c = lst.count("d") # 查询d出现的次数
print(c)
lst = [1, 11, 22, 2]
lst.sort() # 排序. 默认升序
print(lst)
lst.sort(reverse=True) # 降序
print(lst)
lst = ["a", "b", "c", "d", "e", "f"]
print(lst)
lst.reverse() #反转
print(lst)
l = len(lst) # 列表的⻓度
print(l)
三. 列表的嵌套
lst = [1, "a", "c",'呵呵哈','hello' ,["e",["d"], "f"]]
# 找到c
print(lst[2])
# 找到a和c
print(lst[1:3])
# 找到呵呵哈的哈字
print(lst[3][2])
# 将hello拿到. 然后⾸字⺟⼤写. 再扔回去
s = lst[4]
s = s.capitalize()
lst[4] = s
print(lst)
# 简写
lst[4] = lst[4].capitalize()
print(lst)
# 呵呵哈的哈换成呵
lst[1] = lst[3].replace("哈", "呵")
print(lst)
lst[5][1].append("雪碧")
print(lst)
四. 元组和元组嵌套
元组: 俗称不可变的列表.⼜被成为只读列表, 元组也是python的基本数据类型之⼀, ⽤⼩括号括起来, ⾥⾯可以放任何数据类型的数据, 查询可以. 循环也可以. 切片也可以. 但就是不能改.
tu = (1, "a", "b", "c", "d")
print(tu)
print(tu[0])
print(tu[2])
print(tu[2:5]) # 切⽚之后还是元组
# for循环遍历元组
for el in tu:
print(el)
# 尝试修改元组
# tu[1] = "3" # 报错 'tuple' object does not support item assignment
tu = (1, "哈哈", [], "呵呵")
# tu[2] = ["fdsaf"] # 这么改不⾏
tu[2].append("8") # 可以改了. 没报错
tu[2].append("9")
print(tu)
关于不可变, 注意: 这⾥元组的不可变的意思是⼦元素不可变. ⽽⼦元素内部的⼦元素是可以变, 这取决于⼦元素是否是可变对象.
元组中如果只有⼀个元素. ⼀定要添加⼀个逗号, 否则就不是元组
tu = (1,)
print(type(tu))
元组也有count(), index(), len()等⽅法
五. range
range可以帮我们获取到⼀组数据. 通过for循环能够获取到这些数据

六.列表补充
循环删除列表中的每⼀个元素

分析原因:
for的运⾏过程. 会有⼀个指针来记录当前循环的元素是哪⼀个, ⼀开始这个指针指向第0
个. 然后获取到第0个元素. 紧接着删除第0个. 这个时候. 原来是第⼀个的元素会⾃动的变成
第0个. 然后指针向后移动⼀次, 指向1元素. 这时原来的1已经变成了0, 也就不会被删除了.
⽤pop删除试试看:


经过分析发现. 循环删除都不⾏. 不论是⽤del还是⽤remove. 都不能实现. 那么pop呢?

只有这样才是可以的

或者. ⽤另⼀个列表来记录你要删除的内容. 然后循环删除

注意: 由于删除元素会导致元素的索引改变, 所以容易出现问题. 尽量不要再循环中直接去删
除元素. 可以把要删除的元素添加到另⼀个集合中然后再批量删除
浙公网安备 33010602011771号