Python数据类型_列表类型
2020-07-25 本文已影响0人
xilifeng
列表类型转换
res = list("hello") # 能被for循环的类型均可作list类型转换,字符串,列表,字典
列表类型的常用操作
按索引存取值(正向存取+反向存取):可取可改
l = [11, 22, 33]
print(l[-1])
l[0] = 44
print(l)
切片 是复制原列表的索引, 不改原列表中的值
l = [11, 22, 33, 44, 55]
res = l[0:4:2] # l[头:尾:步长]顾头不顾尾, 不是改原值, 是产生新值
res1 = l[:] # 复制原列表l的索引, 产生一份新的索引, 所以新列表res1的id会改变
res1[4] = [66, 77] # 改变4号位的值, 列表res1的索引位置没变, 所以id不变
src_l = [11, 22, [33, 44]] # 列表中[0]和[1]是不可变类型, 浅拷贝和深拷贝一样
dst_l = src_l[:] # 复制原列表的索引, 浅拷贝, 等同 dst_l = src_l.copy()
dst_l[2][0] = 666 # 更改了和原列表共享的值, 新老列表[2][0]位置的值一起改变, 因为是浅拷贝
src_l = [11, 22, [33, 44]] # 深拷贝示例
from copy import deepcopy # 列表中含可变类型, 要不影响原列表中可变类型的数据, 须深拷贝
dst_l = deepcopy(src_l) # 深拷贝, 每一层遇到可变类型会造一个新列表
dst_l[2][0] = 666 # 因为深拷贝, 新老列表[2][0]位置的值一起改变
长度
src_l = [11, 22, [33, 44]]
print(len(src_l)) # 3
成员运算in 和 not in
l = [11, 22, [33, 44]]
print([44, 33] in l) # False
print(33 in l) # False
成员运算in 和 not in示例: 去重
infos = [
{"name": "felix", "age": 20},
{"name": "jack", "age": 21},
{"name": "felix", "age": 20}
]
l = []
for info in infos:
if info not in l:
l.append(info)
print(l)
内置方法: append 追加到末尾,改变原列表, 不是产生新列表, 没有返回值, 所以不能赋值给新变量
l = [11, 22, 33]
l.append(44)
print(l)
内置方法: insert 插入到指定索引位置
l = [11, 22, 33]
l.insert(0, "aa")
print(l)
内置方法: extend 批量追加
l = [1, 2, 3]
names = ["jack", "felix", "tom"]
l.extend(names)
print(l)
内置方法: count, index, clear
names = ["jack", "felix", "tom"]
res = names.count("felix") # 统计出现次数
res = names.index("felix", 0, 2) # 找不到就报错, 列表没有find
names.clear() # 清空列表, 没有返回值, 不能赋值
names.reverse() # 直接把原列表翻转, 和切片names[::-1]不同, 切片是复制一份到新值, 没有返回值
l = [-5, 1.1, 0, 10]
l.sort() # 列表中只能是数字,才能用sort从小到大排列
l.sort(reverse=True) # 从大到小排
内置方法: 删除
names = ["jack", "felix", "tom"]
方式1: 万能删除, 是语句, 没有返回值, 不能赋值, 单纯删
del names[0]
方式2: remove指定元素删除, 没有返回值, 不能赋值, 单纯删
names.remove("tom")
方式3: pop指定索引删除, 由返回值, 剪切走
res = names.pop(0)
print(res)