文章目录
定义
由一系列变量组成的可变序列容器。
通常只存一类信息
特征
列表:预留空间
列表改值内存图
列表的扩容内存图
列表的创建
1 方括号 []
用方括号 [] 将某些基本数据类型的数据括起来,并用‘,’逗号分隔构成了列表
lie = [1,2,3,4,5,6,7,8,9,1]
lie = ['a','d','c','d','e','d']
lie = ['a','d','c','d',2,3,44,'d']
lie = ['a','d','c','d',2,3,44,(2,3,4),'d']
2 list()
列表名 = list(可迭代对象)
list02 = list("我是齐天大圣")
3 列表推导式
#基本操作
lie = [x for x in range(10)]
#对x进一步操作
lie = [x*x for x in range(10)]
#添加限制条件
lie = [x*x for x in range(10) if x % 2 == 0]
#两层循环
A='ABC'
B='abc'
lie = [a+b for a in A for b in B]
#多个变量
d = {'x': 'A', 'y': 'B', 'z': 'C' }
lie = [a+b for a,b in d.items()]
4 根据一个列表生成新的列表
lie1 = [11,44,22,33,44,55,11]
#直接添加一个引用,lie1,lie2实质上是同一个列表
lie2 = lie1
#将lie1的内容复制给lie3,生成的一个新的列表lie3
lie3 = lie1.copy()
#这是最直观的将一个列表中的数据加到另一个列表中
lie4 = []
for i in lie1:
lie4.append(i)
增
1 append()
自动将括号内的内容增加到列表末尾
lie.append(999)
2 insert(index,object)
作用:对原列表修改。在索引前增加一个对象,可以是万物,后面的元素后移
参数:索引,对象
返回值:None
错误:参数不够时报TypeError
lie.insert(100,'aaa')
3 extend(iterable)
作用:通过append的方式将可迭代对象的元素拓展到列表中
参数:可迭代对象
返回值:None
错误:
lie.extend(lie2)
4 copy()
作用:浅拷贝一个列表
参数:无
返回值:一个列表
错误:
思考
知道数据,需要考虑增到什么位置,增加的数据是单个的,或者增加的数据就是一个列表呢,考虑的是如何增进来,途中是否是有序的增加,被增加的数据的存放形式是什么样的
删
pop(def=index)
作用:默认弹出最后一个,如果指定索引则弹出指定值
参数:索引
返回值:元素值
错误:列表为空,或者超出索引则返回IndexError
#根据索引弹出,pop()默认弹出最后一个,括号中指定索引,就根据索引弹出
l = [0, 1, 2, 3, 4, 2,4,5, 6, 7, 8, 9]
print(l.pop()) # 9
print(l.pop(3)) # 3
print(l.pop(45)) # IndexError: pop index out of range
remove(object)
作用:删除第一个出现的元素
参数:元素
返回值:None
错误:如果指定元素不在列表中,会报ValueError
lie2.remove(xxx)
#根据索引删除
del lie2[x]
#删除一片
del lie2[-2:]
#直接删掉整个列表
del lie2
clear()
作用:清空列表 相当于list01[:] = []
参数:无
返回值:None
错误:
#直接清空列表
lie2.clear()
改
自身的顺序问题,将原列表反转
#直接根据索引改
lie2[2] = 'asd'
#切片改
lie[-2:] = [10,20]
reverse()
作用:将列表反转
参数:无
返回值:None
错误:
lie2.reverse()
sort(reverse=)
作用:将列表排序,必须是同种类型,默认reverse=False为升序
参数:key(少用),reverse
返回值:None
错误:
lie2.sort(reverse=True)
查
count(v)
功能:统计元素在列表中的个数
参数:参数为 值
返回值:个数
错误:当 value 不存在时,返回0
l = [0, 1, 2, 3, 4, 2,4,5, 6, 7, 8, 9]
print(l) # [0, 1, 2, 3, 4, 2, 4, 5, 6, 7, 8, 9]
print(l.count(4)) # 2
print(l.count(45)) # 0
index(v,begin,stop)
功能:根据值查索引,如果有多个,则返回第一个
参数:参数为 值,起始,结束
返回值:第一个元素的索引
错误:当 value 不存在时触发ValueError错误
l = [i for i in range(10)]
print(l) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(l.index(3,2,5)) # 3
超级无敌切片大法
首先切片是对一群数据的操作!等号后必须跟可迭代对象
增
list1 = [1, 2, 3, 4, 5]
list1[1:1] = [100, 200, 300]
[1, 100, 200, 300, 2, 3, 4, 5]
list1[1:1] = 'abc'
[1, 'a', 'b', 'c', 2, 3, 4, 5]
删
list1 = [1, 2, 3, 4, 5]
list1[1:1] = ''
[1, 2, 3, 4, 5]
list1[1:1] = []
[1, 2, 3, 4, 5]
改
list1 = [1, 2, 3, 4, 5]
list1[1:4] = [22, 33, 44]
[1, 22, 33, 44, 5]
list1[1:4] = "abc"
[1, 'a', 'b', 'c', 5]
查
列表的切片是浅拷贝出了一个新的列表
list1 = [1, 2, 3, 4, 5]
print(list1[1:4])
[2, 3, 4]
列表性质
#长度
print(len(lie2))
#最大值
print(max(lie2))
#最小值
print(min(lie2))
#查看索引与值
for x,y in enumerate(lie2):
print(x,y)
一个关键问题:倒序删除
删除列表中大于10的数
采用倒序删除的方法
"""
练习:
在列表中[5,6,17,78,34,5]
删除大于10的元素
温馨提示:调试/画图
"""
list01 = [5, 6, 17, 78, 34, 5]
# for item in list01:
# if item > 10:
# # 删除的是变量
# # del item
# # 漏删(后面元素向前移动)
# list01.remove(item)
# for i in range(len(list01)):
# if list01[i] > 10:
# # 错误(删除元素则总数减少)
# del list01[i]#
# 解决:倒序删除
for i in range(len(list01) - 1, -1, -1):
if list01[i] > 10:
del list01[i]
print(list01)