python容器类型数据进阶

本文详细介绍了Python中的容器类型数据,包括列表的拼接、复刻、切片、获取、修改和删除,以及列表相关函数;深入探讨了深浅拷贝的区别;讲解了字典的增删改查和相关函数;阐述了集合的交集、差集、并集等操作,并介绍了集合相关函数和冰冻集合的特性。
摘要由CSDN通过智能技术生成

一、列表的相关操作

(1)列表的拼接(同元组)
(2)列表的重复(同元组)
(3)列表的切片(同元组)

  • 语法 =>
  • 列表[::] 完整格式:[开始索引:结束索引:间隔值]
  • [开始索引:] 从开始索引截取到列表最后
  • [:结束索引] 从开头截取到结束索引之前
  • [开始索引:结束索引] 从开始索引截取到结束索引之前
  • [开始索引:结束索引:间隔值] 从开始索引截取到结束索引之前按照指定的间隔截取列表元素值
  • [:]和[::] 截取所有列表

(4)列表的获取 (同元组)
(5)列表的修改 (可切片)
(6)列表的删除 (可切片)

1、列表的拼接(同元组)

lstvar1 = [123,234,345]
lstvar2 = [456,678,789]
res = lstvar1 +lstvar2
print(res)

运行结果:
运行结果

2、列表的复刻(同元组)

lstvar1 = [123,234,345]
res = lstvar1 * 3
print(res)

运行结果:
运行结果

3、列表的切片

(1)[开始索引:] 从开始索引截取到列表最后

lstvar1 = [123,234,345,456,567,678,789]
res = lstvar1[2:]
print(res)

运行结果:
运行结果

(2)[:结束索引] 从开头截取到结束索引之前

lstvar1 = [123,234,345,456,567,678,789]
res = lstvar1[:5]
print(res)

运行结果:
运行结果

(3)[开始索引:结束索引] 从开始索引截取到结束索引之前

lstvar1 = [123,234,345,456,567,678,789]
res = lstvar1[2:5]
print(res)

运行结果:
运行结果

(4)[开始索引:结束索引:间隔值] 从开始索引截取到结束索引之前按照指定的间隔截取列表元素值

  • 正向截取
lstvar1 = [123,234,345,456,567,678,789]
res = lstvar1[1:6:2]
print(res)

运行结果:
运行结果

  • 逆向截取
lstvar1 = [123,234,345,456,567,678,789]
res = lstvar1[-1:-6:-2]
print(res)

运行结果:
运行结果

(5) [:]和[::] 截取所有列表

lstvar1 = [123,234,345,456,567,678,789]
res1 = lstvar1[:]
res2 = lstvar1[::]
print(res1)
print(res2)

运行结果:
运行结果

4、列表的获取(同元组)

可通过索引获取列表元素

lstvar1 = [123,234,345,456,567,678,789]
res1 = lstvar1[0]
res2 = lstvar1[-1]
print(res1)
print(res2)

运行结果:
运行结果

5、列表的修改(可切片)

要求的数据类型是:可迭代型数据(容器类型数据、range对象、迭代器)

(1)利用切片可以一次修改多个元素,没有个数上限制

lstvar1 = [123,234,345,456,567,678,789]
lstvar1[1:5] = ["张三","李四","王五","赵六"]
print(lstvar1)

运行结果:
运行结果

(2)切片配合步长,切出多少个元素,修改多少个元素

lstvar1 = [123,234,345,456,567,678,789]
lstvar1[1:5:2] = ["张三","李四"]
print(lstvar1)

运行结果:
运行结果

6、列表的删除 (可切片)

lstvar1 = [123,234,345,456,567,678,789]
del lstvar1[-1]
print(lstvar1)

运行结果:
运行结果

二、列表相关函数

1、增

(1)append() 向列表的末尾添加新的元素

lstvar = [123,234,345,456,567,678,789]
lstvar.append(901)
print(lstvar)

运行结果:
运行结果

(2)insert () 在指定索引之前插入元素
用法:insert(索引,“要插入元素”)

lstvar = [123,234,345,456,567,678,789]
lstvar.insert(3,"new_num")
print(lstvar)

运行结果:
运行结果

(3)extend() 迭代追加所有元素

new_lst =[1,2,3,4,5]
lstvar = [123,234,345,456,567,678,789]
lstvar.extend(new_lst)
print(lstvar)

运行结果:

运行结果

2、删

(1)pop() 通过索引删除元素

lstvar = [123,234,345,456,567,678,789]
lstvar.pop(2)
print(lstvar)

运行结果:
运行结果

(2)remove() 通过值删除元素

lstvar = [123,234,345,456,567,678,789]
lstvar.remove(345)
print(lstvar)

运行结果:
运行结果

(3)clear 清空列表

lstvar = [123,234,345,456,567,678,789]
lstvar.clear()
print(lstvar)

运行结果:
运行结果

3、改、查(参考列表的操作)

4、其他函数

(1)index() 获取某个值在列表中索引

用法:index(值:开始索引:结束索引) 找不到会报错

lstvar = [123,234,345,456,567,678,789]
res = lstvar.index(567)
print(res)

运行结果:
运行结果

(2)count() 计算某个元素出现的个数

lstvar = [123,234,345,456,567,678,789,234]
res = lstvar.count(234)
print(res)

运行结果:
运行结果

(3)sort() 列表排序(默认从小到大排序)

lstvar = [123,234,345,456,567,678,789,234]
lstvar.sort()
print(lstvar)

运行结果:
运行结果

从大到小排序:

lstvar = [123,234,345,456,567,678,789,234]
lstvar.sort(reverse=True)
print(lstvar)

运行结果:
运行结果

注:英文和中文也可以进行排序,英文排序遵循ascii码,中文排序无规律可循。

5、reverse() 列表反转

lstvar = [123,234,345,456,567,678,789,234]
lstvar.reverse()
print(lstvar)

运行结果:
运行结果

三、深浅拷贝

1、浅拷贝

将变量进行浅拷贝,浅拷贝生成的新变量不受原变量改动的影响。

方法一:引入copy模块

import copy
lst1 = [11,22,33,44,55]
lst2 = copy.copy(lst1)
lst1.append(66)
print(lst1)
print(lst2)

运行结果:
运行结果

方法二:变量.copy()

lst1 = [11,22,33,44,55]
lst2 = lst1.copy()
lst1.append(66)
print(lst1)
print(lst2)

运行结果:
运行结果

2、深拷贝

如果是容器类型数据,深拷贝可以拷贝多级容器,deepcopy()。

如果有一个二级列表,对比来看,首先我们进行浅拷贝并追加赋值

import copy
lst1 = [11,22,33,44,55,[1,2,3]]
lst2 = copy.copy(lst1)
lst1[-1][0] = 2
lst1.append(66)
print(lst1)
print(lst2)

运行结果:
运行结果

如图,二级容器内的数据也随之改变,说明浅拷贝并没有拷贝二级容器内的内容,而是将二级容器指向了原内存地址。
此时,我们来看看深拷贝输出结果:

import copy
lst1 = [11,22,33,44,55,[1,2,3]]
lst2 = copy.deepcopy(lst1)
lst1[-1][0] = 2
lst1.append(66)
print(lst1)
print(lst2)

运行结果:
运行结果

如图,二级容器结果没有变化,说明深拷贝成功将二级容器拷贝。

总结:
(1)深拷贝只拷贝一级容器中的所有数据
(2)深拷贝拷贝所有层级的所有元素
浅拷贝数据速度深拷贝速度快
深拷贝在执行时:
如果是不可变数据,地址会暂时指向原来数据。
如果是可变数据,直接开辟新空间。

四、字典相关函数

1、增

(1)赋值
dic = {}
dic[key] = value

dic = {}
dic["key1"] = "value1"
dic["key2"] = "value2"
print(dic)

运行结果:
运行结果

(2)fromkeys(不推荐) 使用一组键和默认值创建字典

lst = [11,22,33]
dic = {}.fromkeys(lst,None)
print(dic)

运行结果:
运行结果

2、删

(1)pop() 通过键去获取键值对(若没有该键可设置默认值,预防报错)

dic = {"key1":11,"key2":22,"key3":33,"key4":44,"key5":55}
dic.pop("key2")
print(dic)

运行结果:
运行结果

(2)popitem() 删除最后一个键值对

dic = {"key1":11,"key2":22,"key3":33,"key4":44,"key5":55}
dic.popitem()
print(dic)

运行结果:

运行结果

(3)clear() 清空字典

dic = {"key1":11,"key2":22,"key3":33,"key4":44,"key5":55}
dic.clear()
print(dic)

运行结果:
运行结果

3、改

update() 批量更新,键存在就更新,不存在就添加。
方法一:两字典更新

dic1 = {"key1":11,"key2":22,"key3":33,"key4":44,"key5":55}
dic2 = {"key4":123,"key5":321,"key6":66}
dic1.update(dic2)
print(dic1)

方法二:通过关键字更新

dic = {"key1":11,"key2":22,"key3":33,"key4":44,"key5":55}
dic.update(key6=66,key7=77)
print(dic)

运行结果:
运行结果

4、查

get() 通过键获取值:

dic = {"key1":11,"key2":22,"key3":33,"key4":44,"key5":55}
res = dic.get("key2")
print(res)

运行结果:
运行结果

5、其他重要函数

(1)keys 将字典中的键组成新的可迭代对象

dic = {"key1":11,"key2":22,"key3":33,"key4":44,"key5":55}
res = dic.keys()
print(res)

运行结果:
运行结果

(2)values 将字典中的值组成新的可迭代对象

dic = {"key1":11,"key2":22,"key3":33,"key4":44,"key5":55}
res = dic.values()
print(res)

运行结果:
运行结果

(3)items 将字典中的键值对凑成一个个元组,组成新的可迭代对象

dic = {"key1":11,"key2":22,"key3":33,"key4":44,"key5":55}
res = dic.items()
print(res)

运行结果:
运行结果

五、集合相关操作

1、intersection() 交集

set1 = {"sir1","sir2","lady1","lady2"}
set2 = {"sir1","sir3","lady1","lady3"}
res = set1.intersection(set2)
print(res)

运行结果:
运行结果

简写:&

set1 = {"sir1","sir2","lady1","lady2"}
set2 = {"sir1","sir3","lady1","lady3"}
res = set1 & set2
print(res)

运行结果:
运行结果

2、difference 差集

set1 = {"sir1","sir2","lady1","lady2"}
set2 = {"sir1","sir3","lady1","lady3"}
res = set1.difference(set2)
print(res)

运行结果:
运行结果

简写:-

set1 = {"sir1","sir2","lady1","lady2"}
set2 = {"sir1","sir3","lady1","lady3"}
res = set1 - set2
print(res)

运行结果:
运行结果

3、union 并集

set1 = {"sir1","sir2","lady1","lady2"}
set2 = {"sir1","sir3","lady1","lady3"}
res = set1.union(set2)
print(res)

运行结果:
运行结果

简写:|

set1 = {"sir1","sir2","lady1","lady2"}
set2 = {"sir1","sir3","lady1","lady3"}
res = set1 | set2
print(res)

运行结果:
运行结果

4、symmetric_difference 对称差集

set1 = {"sir1","sir2","lady1","lady2"}
set2 = {"sir1","sir3","lady1","lady3"}
res = set1.symmetric_difference(set2)
print(res)

运行结果:
运行结果

简写: ^

set1 = {"sir1","sir2","lady1","lady2"}
set2 = {"sir1","sir3","lady1","lady3"}
res = set1 ^ set2
print(res)

运行结果:
运行结果

5、issubset 判断是否为子集

set1 = {"sir1","sir2","lady1","lady2"}
set2 = {"sir1","sir3","lady1","lady3"}
res = set1.issubset(set2)
print(res)

运行结果:
运行结果

简写:<

set1 = {"sir1","sir2","lady1","lady2"}
set2 = {"sir1","sir3","lady1","lady3"}
res = set1 < set2
print(res)

运行结果:
运行结果

6、issuperset 判断是否为父级

set1 = {"sir1","sir2","lady1","lady2"}
set2 = {"sir1","lady1"}
res = set1.issuperset(set2)
print(res)

运行结果:
运行结果

简写:>

set1 = {"sir1","sir2","lady1","lady2"}
set2 = {"sir1","lady1"}
res = set1 > set2
print(res)

运行结果:
运行结果

7、isdisjoint() 检测两集合是否不相交

set1 = {"sir1","sir2","lady1","lady2"}
set2 = {"sir3","lady3"}
res = set1.isdisjoint(set2)
print(res)

运行结果:
运行结果

六、集合相关的函数

1、增

(1) add() 向集合中添加数据,一次添加一个。

set = {"sir1","sir2","lady1","lady2"}
set.add("sir3")
print(set)

运行结果:
运行结果

(2)update() 迭代着增加,一次加一堆

strvar = ("lady3","sir3")
set = {"sir1","sir2","lady1","lady2"}
set.update(strvar)
print(set)

运行结果:
运行结果

2、删

(1)clear() 清空集合

set = {"sir1","sir2","lady1","lady2"}
set.clear()
print(set)

运行结果:
运行结果

(2)pop() 随机删除一个元素

set = {"sir1","sir2","lady1","lady2"}
set.pop()
print(set)

运行结果:
运行结果

(3)remove() 删除集合中的指定值,不存在则报错

set = {"sir1","sir2","lady1","lady2"}
set.remove("sir2")
print(set)

运行结果:
运行结果

(4)discard() 删除集合中的指定值,不存在不删除

set = {"sir1","sir2","lady1","lady2"}
set.discard("sir2")
print(set)

运行结果:
运行结果

七、冰冻集合

frozenset() 可强制将集合转为冰冻集合
冰冻集合:不能在冰冻集合中进行增删操作,只能交差并补。

set = {"sir1","sir2","lady1","lady2"}
res = frozenset(set)
print(res,type(res))

运行结果:
运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值