pytho----列表
创建列表
方法一:
ls = [‘a’,‘b’]
方法二
ls = list()
ls = [1,'a']
print(type(ls)) # <class 'list'>
ls = list()
print(type(ls)) # <class 'list'>
列表运算
相加
符号:+
作用:将两个或者两个以上的列表拼接到一起。
ls1 = ['a','b']
ls2 = [1,2]
lst = ls1 + ls2
print(lst) # ['a', 'b', 1, 2]
print([1]+["a"]+['哈哈']) # [1, 'a', '哈哈']
相乘
符号:*
作用:用数字n乘以一个列表,生成一个新的列表,新列表中原列表中的元素重复n次。
ls = ['a','b']
lst = ls * 3
print(lst) # ['a', 'b', 'a', 'b', 'a', 'b']
访问列表
列表访问,也就是操作索引的过程,并且返回索引位置上的元素。
正向索引 | 0 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|---|
列表 | 11 | “ok” | 99 | “aa” | 22 | “哈哈” |
反向索引 | -6 | -5 | -4 | -3 | -2 | -1 |
# 一维列表的访问
ls = ["python","java","go","R"]
print(ls[2]) # go
print(ls[-3]) # java
# 二维列表的访问
ls = [
[1,2,3],
[4,5,6],
[7,8,9]
]
# 第0行第2列
print(ls[0][2]) # 3
# 第2行第2列
print(ls[2][2]) # 9
列表切片
语法:ls[开始索引 : 结束索引 : 间隔]
切片的5种情况:
(1)、ls[开始索引 : ] # 从开始索引截取到列表的最后
(2)、ls[ : 结束索引] # 从开头截取到结束索引-1的元素
(3)、ls[ 开始索引: 结束索引] # 从开始索引截取到结束索引-1的元素
(4)、ls[开始索引 : 结束索引 : 间隔] # 从开始索引截取到结束索引-1的元素,并且按照指定的间隔截取元素
(5)、ls[ : ] 或 str[ : :] # 截取列表的所有元素
ls = [0,1,2,3,4,5,6,7,8,9]
print(ls[2:]) # [2, 3, 4, 5, 6, 7, 8, 9]
print(ls[:6]) # [0, 1, 2, 3, 4, 5]
print(ls[2:8]) # [2, 3, 4, 5, 6, 7]
print(ls[0:9:2]) # [0, 2, 4, 6, 8]
print(ls[: :]) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
修改元素
通过重新赋值修改某个元素的值
# 通过访问模式修改
ls = [0,1,2,3,4,5,6,7,8,9]
ls[2] = 'python'
print(ls) # [0, 1, 'python', 3, 4, 5, 6, 7, 8, 9]
ls[-1] = "java"
print(ls) # [0, 1, 'python', 3, 4, 5, 6, 7, 8, 'java']
# 通过切片模式修改
ls = [0,1,2,3,4,5,6,7,8,9]
ls[2:6] = 'a','b','c','d'
print(ls) # [0, 1, 'a', 'b', 'c', 'd', 6, 7, 8, 9]
ls[2:6] = '切片修改'
print(ls) # [0, 1, '切', '片', '修', '改', 6, 7, 8, 9]
del命令
可以从列表中删除元素,也可以删除整个列表。
ls = ['小学','中学','高中','大学']
del ls[0]
print(ls) # ['中学', '高中', '大学']
del ls[-1]
print(ls) # ['中学', '高中']
del ls # 删除整个列表,列表不存在
列表方法
(1)、append()
功能:向列表的末尾添加新的元素
格式:列表.append(值)
返回值:None
注意:新添加的值在列表的末尾,该函数直接操作原有列表
ls = [0,1,2,4,5]
a = ls.append(666)
print(a) # None
print(ls) # [0, 1, 2, 4, 5, 666]
(2)、insert()
功能:在指定索引之前插入元素
格式:列表.insert(索引,值)
返回值:None
注意:直接改变原有列表
ls = [1,2,3,4,5]
a = ls.insert(3,888)
print(a) # None
print(ls) # [1, 2, 3, 888, 4, 5]
(3)、extend()
功能:迭代追加所有元素
格式:列表.extend(可迭代性数据)
返回值:None
注意:直接改变原有列表
(4)、pop()
功能:通过指定索引删除元素,若没有索引移除最后那个
格式:列表.pop(索引)
返回值:删除的元素
(注意:没有指定索引,默认移除最后一个元素 )
ls = ['小米','华为']
a = ls.extend(['真我','iqoo'])
print(a) # None
print(ls) # ['小米', '华为', '真我', 'iqoo']
(5)、remove()
功能:通过给予的值来删除,如果多个相同元素,默认删除第一个
格式:列表.remove(值)
返回值:None
(注意:如果有索引的情况推荐使用pop,效率高于remove)
ls = ['小米', '华为', '真我', 'iqoo']
a = ls.remove('真我')
print(a) # None
print(ls) # ['小米', '华为', 'iqoo']
(6)、clear()
功能:清空列表
格式:列表.clear()
返回值:None
注意:直接改变原有列表,原列表为空
ls = ['小米', '华为', '真我', 'iqoo']
a = ls.clear()
print(a) # None
print(ls) # []
(7)、index()
功能:获取某个值在列表中的索引
格式:列表.index(值[,start][,end]) # [] 表达参数可选项
返回值:找到返回索引 (找不到报错)
ls = ['00','11','22','33','44','55','66','77','88','99']
a = ls.index('55')
print(a) # 5
b = ls.index('55',7,9) # 在索引7-8范围查找,[7,9)
print(b) # 报错:ValueError: 5 is not in list
(8)、count()
功能:计算某个元素出现的次数
格式:列表.count(值)
返回值:次数
ls = [11,22,33,11,44,11]
a = ls.count(11)
print(a) # 3
(9)、sort()
功能:列表排序(默认小到大排序)
格式:列表.sort(reverse=False)
返回值:None
注意:直接更改原列表
ls = [9,7,8,1,4,5,2,3,6]
a = ls.sort()
print(a) # None
print(ls) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
b = ls.sort(reverse=True)
print(ls) # [9, 8, 7, 6, 5, 4, 3, 2, 1]
(10)、reverse()
功能:列表反转操作
格式:列表.reverse()
返回值:None
注意:直接更改原列表
ls = [9, 8, 7, 6, 5, 4, 3, 2, 1]
a = ls.reverse()
print(a) # None
print(ls) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
ls.reverse()
print(ls) # [9, 8, 7, 6, 5, 4, 3, 2, 1]
浅拷贝和深拷贝
赋值
指向同一块内存地址
ls = [1,2,3,4,5]
lst = ls
ls.append(666)
lst.append(999)
# lst 的值随 ls 的值的改变而改变,反之也成立
print(lst) # [1, 2, 3, 4, 5, 666]
print(id(ls)) # 2445244758720
print(id(lst)) # 2445244758720
浅拷贝
指向不同的地址,重新开辟一块内存地址
# 方法一
ls = [1,2,3,4,5]
lst = ls.copy()
ls.append(666)
# lst 的值不随 ls 的值的改变而改变,反之也成立
print(lst) # [1, 2, 3, 4, 5]
print(id(ls)) # 2682288929472
print(id(lst)) # 2682715094464
# 方法二
import copy
ls = [1,2,3,4,5]
lst = copy.copy(ls)
print(lst) # [1, 2, 3, 4, 5]
深拷贝
ls = [1,2,[4,5]]
lst = ls.copy()
ls.append(888)
ls[2].append(666)
# 浅拷贝时二维及高维序列时,lst 的高维元素值会随 ls 改变而改变,反向也成立
print(lst) # [1, 2, [4, 5, 666]]
# 整体内存地址不同
print(id(ls)) # 2679799940224
print(id(lst)) # 2679800217664
# 高维元素内存地址相同
print(id(ls[2])) # 2679382080192
print(id(lst[2])) # 2679382080192
# 深拷贝
import copy
ls = [1,2,[4,5]]
lst = copy.deepcopy(ls)
ls[2].append(666)
# 深拷贝时高维元素也不会因一方的改变而改变
print(lst) # [1, 2, [4, 5]]
print(id(ls[2])) # 2440958195008
print(id(lst[2])) # 2440958194944
注意:前拷贝比深拷贝快,若用浅拷贝就能解决的问题尽量用浅拷贝。
python----元组
元组的元素是不能更改的,也就是创建一个元组后就不能更改了。元组里面能用的方法只有 index 和 count 和列表用法一样。
由于元组的很多用法跟列表相似,这里就简单举几个例子
# 创建元组
tu = (1,2,3)
tup = tuple()
print(type(tu),type(tup)) # <class 'tuple'> <class 'tuple'>
# 访问元组
tp = (0,1,2,3,4,5)
t = tp[2]
print(t) # 2
# 切片
tt = tp[2:5]
print(tt) # (2, 3, 4)
元组列表互换
# 元组转换成列表
tp = (1,2,3,4,5)
ls = list(tp)
print(ls) # [1, 2, 3, 4, 5]
# 列表转换成元组
lst = [1,2,3,4,5]
tup = tuple(lst)
print(tup) # (1, 2, 3, 4, 5)