pytho----列表
创建列表
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', '哈哈']
相乘
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 = [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()
ls = [0,1,2,4,5]
a = ls.append(666)
print(a) # None
print(ls) # [0, 1, 2, 4, 5, 666]
(2)、insert()
ls = [1,2,3,4,5]
a = ls.insert(3,888)
print(a) # None
print(ls) # [1, 2, 3, 888, 4, 5]
(3)、extend()
(4)、pop()
ls = ['小米','华为']
a = ls.extend(['真我','iqoo'])
print(a) # None
print(ls) # ['小米', '华为', '真我', 'iqoo']
(5)、remove()
ls = ['小米', '华为', '真我', 'iqoo']
a = ls.remove('真我')
print(a) # None
print(ls) # ['小米', '华为', 'iqoo']
(6)、clear()
ls = ['小米', '华为', '真我', 'iqoo']
a = ls.clear()
print(a) # None
print(ls) # []
(7)、index()
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()
ls = [11,22,33,11,44,11]
a = ls.count(11)
print(a) # 3
(9)、sort()
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()
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)