列表
列表列表定义列表序列操作序列解包:增删改查增操作删操作改操作查操作
列表嵌套深浅拷贝
列表
列表定义
定义:列表是一个可修改的,元素以逗号分割,以中括号包围的有序序列。
names
= ['lisi', 'zhangsan', 'wangwu']
print(names
) # 输出列表
['lisi', 'zhangsan', 'wangwu']
print(type(names
)) #
<class
'list'>
列表序列操作
# 相加
lst1
= [1, 2, 3]
lst2
= [4, 5, 6]
lst3
= lst1
+ lst2
print(lst3
) #
[1, 2, 3, 4, 5, 6]
#重复
lst1
= [1, 2, 3]
d
= lst1
* 3
print(d
) #
[1, 2, 3, 1, 2, 3, 1, 2, 3]
#获取元素
lst1
= [1, 2, 3]
lst2
= [4, 5, 6]
#这是数值相加,可不是拼接,因为根据索引取到了对应的值
x
= lst1
[1] + lst2
[2]
print(x
) #
8
# 遍历链表
a
= ["a", 'b', 2, 3]
print("第一种")
for x in a
:
print(x
)
print("第二种")
for x in
range(len(a
)):
print(x
, a
[x
])
运行结果: 切片: 如果说 我在列表中取出几条元素 怎么取 用切片 截取列表 : 列表名[x:y:z] 截取列表的时候 内置三个值 第一个值是截取的起始位置 一般情况下是必选的 如果不写 默认是0 第二个值是截取的最终位置 可选 默认是截取到列表的末尾 第三个值是截取的步长 可选 默认是1 截取的时候 包头不包尾 每个值使用:进行分割 但是 如果说 只有一个值 也要使用: 返回值还是一个列表
a
= [1, 2, 3, 4, 5]
b
= a
[2:3]
print(b
) #
[3]
a
= [1, 2, 3, 4, 5, 6, 7, 8, 9]
b
= a
[2:7:2]
print(b
) #
[3, 5, 7]
a
= [1, 2, 3, 4, 5, 6, 7, 8, 9]
b
= a
[2:]
print(b
) #
[3, 4, 5, 6, 7, 8, 9]
a
= [1, 2, 3, 4, 5, 6, 7, 8, 9]
b
= a
[:3]
print(b
) #
[1, 2, 3]
a
= [1, 2, 3, 4, 5, 6, 7, 8, 9]
b
= a
[2::2] #
[3, 5, 7, 9]
print(b
)
序列解包:
可以使用 *”变量名” 这种格式来接受多个元素值。并且和位置无关
lst1
, *lst2
= ["a", "b", "c", "d"]
print(lst1
) # a,lst1 是一个字符串类型变量
print(lst2
) #
['b', 'c', 'd'],lst2 是一个列表类型变量。
*lst2
, lst1
= ["a", "b", "c", "d"]
print(lst1
) # lst1接收最后一个元素d
print(lst2
) #
['a', 'b', 'c']
增删改查
增操作
a
= [1, 2, 3, 4, 5]
a
.append(9)
print(a
) #
[1, 2, 3, 4, 5, 9] 在后面追加
# 结论:
'+'加法 等价于extend 方法
a
= [1, 2]
b
= [3, 4]
a
.extend(b
)
print(a
) #
[1, 2, 3, 4]
a
= [1, 2]
b
= [3, 4]
print(a
+ b
) #
[1, 2, 3, 4]
a
= [1, 2, 3, 4, 5]
a
.insert(2, 'a')
print(a
) #
[1, 2, 'a', 3, 4, 5]
删操作
a
= [1, 2, 3, 4, 5]
c
= a
.pop() # 弹出,删除最后一个,默认情况
print(c
) #
5
print(a
)#
[1, 2, 3, 4]
c
= a
.pop(0) # 删除索引位上的
print(c
) #
1
print(a
)#
[2, 3, 4]
# 删除指定元素
a
= [1, 2, 3, 4, 5, 3, 5, 7, 3]
a
.remove(3) # 从左向右删除出现的第一个
3,剩下的不删
print(a
) #
[1, 2, 4, 5, 3, 5, 7, 3]
a
= [1, 2, 3, 4, 5, 3, 5, 7, 3]
del a
[3] # 删索引
print(a
) #
[1, 2, 3, 5, 3, 5, 7, 3]
改操作
a
= [3, 1, 2, 4, 3, 6, 7]
a
[3] = 99 # 通过索引修改
print(a
) #
[3, 1, 2, 99, 3, 6, 7]
a
= [3, 1, 2, 4, 3, 6, 7]
a
.reverse() # 顺序倒序
print(a
) #
[7, 6, 3, 4, 2, 1, 3]
a
= [3, 1, 2, 4, 3, 6, 7]
a
.sort() ##按照ASCII表顺序进行排序
print(a
) #
[1, 2, 3, 3, 4, 6, 7]
a
= [3, 1, 2, 4, 3, 6, 7]
b
= sorted(a
) # 这个有返回值
print(a
) #
[3, 1, 2, 4, 3, 6, 7]
print(b
) #
[1, 2, 3, 3, 4, 6, 7]
# 顺序倒序
a
= [3, 1, 2, 4, 3, 6, 7]
a
.sort(reverse
=True
)
print(a
) #
[7, 6, 4, 3, 3, 2, 1]
查操作
# 计算
3的个数
a
= [3, 1, 2, 4, 3, 6, 7]
b
= a
.count(3)
print(b
) #
2
# 输出
4的索引
a
= [3, 1, 2, 4, 3, 6, 7]
x
= a
.index(4)
print(x
) #
3
列表嵌套
# 取出
3 6 9
a
= [[1, 2, 3], [4, 5, 6, 7], [8, 9]]
print(a
[0][2], a
[1][2], a
[2][1]) #
3 6 9
print("第一题:")
a
= [[1, 2, 3], [4, 5, 6, 7], [8, 9]]
for x in a
:
print(x
)
print("第二题:")
for x in a
:
for i in x
:
print(i
, end
=",") # 实现不换行
print() # 实现换行
运行结果:
深浅拷贝
在 python 中的数据类型包括:bool、int、float、str、set、list、tuple、dict 等等。 我们可以大致将这些数据类型归类为简单数据类型和复杂的数据类型。 简单数据类型: bool、int、float、str。 复杂数据类型:list、tuple、set、dict。
#结论:看出来内存存储的地址的不同
# 简单数据类型
a
=3
b
=3
print(a
==b
)#True
print(a is b
)#True
print(id(a
))#
2012963040
print(id(b
))#
2012963040
#复杂数据类型
a
=[1,2,3]
b
=[1,2,3]
print(a
==b
)#True
print(a is b
)#False
print(id(a
))#
56920328
print(id(b
))#
39511496
a
=[1,2,3]
b
=[1,2,3]
a
.append(5)
print(a
==b
)#False
print(a is b
)#False
print(id(a
))#
39183880
print(id(b
))#
56920328
深浅拷贝:
import copy
#浅拷贝
#只有第一层是和复制的那个一样,其余的层数,在改变的时候也会改变
#深拷贝
#全都重新来一份,就像一个全新的
a
=[1,2,3,[4,5],6]
b
=a
c
=copy
.copy(a
)
d
=copy
.deepcopy(a
)
a
.append(7)
a
[3].append(99)
print(a
,id(a
))
print(b
,id(b
))
print(c
,id(c
))#浅拷贝
print(d
,id(d
))#深拷贝值