python-列表_字典_集合的相关函数_深拷贝和浅拷贝
列表相关的函数
1.增
append 向列表的末尾添加新元素
lst = ["刘德华"] lst.append("周星驰") print(lst)
insert 在指定索引之前插入元素
lst = ["刘德华","周星驰"] lst.insert(0,"吴孟达") lst.insert(2,"朱茵") print(lst)
extend 迭代追加所有元素
"""要求: 数据的类型是可迭代性数据""" strvar = "1234" lst.extend(strvar) print(lst)
2.删
pop 通过指定索引删除元素,若没有索引移除最后那个
lst = ["晏国彰","毛洪磊","刘子涛","刘聪","牧树人"] # 指定索引进行删除 res = lst.pop(1) # 默认没有任何参数,删除的最后一个 res = lst.pop() print(res) print(lst)
remove 通过给予的值来删除,如果多个相同元素,默认删除第一个
lst = ["晏国彰","毛洪磊","刘子涛","刘聪","牧树人","刘子涛","刘子涛"] # 指定值进行删除,如果有多个相同的重复值,默认删掉第一个 lst.remove("刘子涛") print(lst)
clear 清空列表
lst = ["晏国彰","毛洪磊","刘子涛","刘聪","牧树人","刘子涛","刘子涛"] lst.clear() print(lst)
3. 改差 => 参考: 列表的相关操作
4. 其他函数
index 获取某个值在列表中的索引
"""列表.index(值,start,end) [] 表达参数可选项 找不到报错""" lst = ["晏国彰","毛洪磊","刘子涛","刘聪","牧树人","刘子涛","刘子涛"] res = lst.index("刘子涛") res = lst.index("刘子涛",3) """res = lst.index("刘子涛",3,5) => error""" print(res)
count 计算某个元素出现的次数
lst = ["晏国彰","毛洪磊","刘子涛","刘聪","牧树人","刘子涛","刘子涛"] res = lst.count("刘子涛") print(res)""" 区别: 字符串里面的count可以划定范围,列表里面的count不行 strvar = "asjksaaaf" print(strvar.count("a",1)) """
sort 列表排序 (默认从小到大排序)
lst = [99,44,66,1,10,3,-57,-88] lst.sort() print(lst)# 从大到小排序 lst.sort(reverse=True) print(lst)# 排序英文 (ASCII 编码) """一位一位进行比较,在第一位相同的情况下,比较第二位,以此类推""" lst = ["tom","jack","lucy","bob"] lst.sort() print(lst)# 可以对中文进行排序(无规律可循) lst = ["王文","刘德华","周星驰","周润发"] lst.sort() print(lst)
reverse 列表反转操作
lst = ["王文","刘德华","周星驰","周润发"] lst.reverse() print(lst)
5. 浅拷贝 和 深拷贝
a = 15
b = a
a = 16
print(b)lst1 = [1,2,3]
lst2 = lst1
lst1.append(4)
print(lst2)
浅拷贝
import copy lst1 = [1,2,3]# 方法一 copy.copy() 模块.方法 lst2 = copy.copy(lst1) lst1.append(4) print(lst1) print(lst2)# 方法二 列表.copy() lst1 = [1,2,3,4] lst2 = lst1.copy() lst1.insert(0,0) print(lst1) print(lst2)
深拷贝
""" lst1 = [1,2,3,[4,5,6]] lst2 = copy.copy(lst1) lst1[-1].append(7) lst1.append(100) print(lst1) print(lst2) """lst1 = [1,2,3,[4,5,6]] lst2 = copy.deepcopy(lst1) lst1[-1].extend("abc") print(lst1) print(lst2)print(id(lst2[-1])) print(id(lst1[-1]))print(id(lst1[0])) print(id(lst2[0]))lst2[0] = 1111 print(id(lst1[0])) print(id(lst2[0]))
总结
浅拷贝只拷贝一级容器中的所有数据
深拷贝拷贝所有层级的所有元素
浅拷贝速度比深拷贝速度快
深拷贝在执行是: 如果是不可变数据,地址会暂时的指向原来数据
如果是可变数据,直接开辟新空间
不可变数据: Number str tuple
可变数据 : list set dict
字典相关的函数
1. 增
dic = {}
dic["ww"] = "英俊潇洒,一表人才,文武双全"
dic["xm"] = "干游戏,吃泡面,不洗澡"
dic["hh"] = "可爱,漂亮,大方,温柔"
print(dic)"""fromkeys() 使用一组键和默认值创建字典"""lst = ["ww","xm","hh"]
dic = {}.fromkeys(lst,None)
print(dic)"""
注意点: 三个键所指向的列表是同一个(不推荐)dic = {}.fromkeys(lst,[])
print(dic)
dic["ww"].append(1)
print(dic)dic["ww"] = [1]
dic["xm"] = [1]
dic["hh"] = [1]
"""
2. 删
pop() 通过键去删除键值对 (若没有该键可设置默认值,预防报错)
dic = {"top":"花木兰" , "middle":"甄姬" , "bottom":"孙尚香" , "jungle" : "钟馗" , "support":"蔡文姬" } res = dic.pop("top")# 如果删除的是不存在的键,直接报错 # res = dic.pop("top123")# 可以设置默认值,预防报错 res = dic.pop("top123","没有这个键") res = dic.pop("middle","没有这个键") print(res,dic)
popitem() 删除最后一个键值对
dic = {"top":"花木兰" , "middle":"甄姬" , "bottom":"孙尚香" , "jungle" : "钟馗" , "support":"蔡文姬" } res = dic.popitem() print(res,dic)
clear() 清空字典
dic = {"top":"花木兰" , "middle":"甄姬" , "bottom":"孙尚香" , "jungle" : "钟馗" , "support":"蔡文姬" } dic.clear() print(dic)
3. 改
update() 批量更新(有该键就更新,没有就添加)
dic = {'ww': '一表人才,除了帅气的皮囊之外,一无所有', 'ywz': '渣男', 'hxl': '抠脚老汉'} dic_new = {"ywz":"暖男","hxl":"扣手","ly":"小美女,单纯,可爱,活泼,灵巧...."}# 方法一(推荐) dic.update(dic_new) print(dic)# 方法二 dic.update(kxq="聪明,活泼,可爱,灵巧,惹人喜欢",ccg="乐观,大方,可爱,灵巧") print(dic)
4. 查
get() 通过键获取值 (若没有该键可设置默认值,预防报错)
dic = {'ww': '一表人才,除了帅气的皮囊之外,一无所有', 'ywz': '渣男', 'hxl': '抠脚老汉'} res = dic.get("ww") res = dic.get("asvdf") # None res = dic.get("asvdf","没有这个键") # res = dic["abcdef"] error print(res)
5. 重点掌握
keys() 将字典的键组成新的可迭代对象
dic = {'ww': '一表人才,除了帅气的皮囊之外,一无所有', 'ywz': '渣男', 'hxl': '抠脚老汉'} res = dic.keys() print(res)
values() 将字典中的值组成新的可迭代对象
dic = {'ww': '一表人才,除了帅气的皮囊之外,一无所有', 'ywz': '渣男', 'hxl': '抠脚老汉'} res = dic.values() print(res)
items() 将字典的键值对凑成一个个元组,组成新的可迭代对象
dic = {'ww': '一表人才,除了帅气的皮囊之外,一无所有', 'ywz': '渣男', 'hxl': '抠脚老汉'} res = dic.items() print(res)
集合
1. 集合的相关操作
set1 = {"jacklove","theshy","rookie","xboyww"}
set2 = {"倪萍","张国荣","赵本山","刘能","赵四","xboyww"}# intersection() 交集
res = set1.intersection(set2)
print(res)
# 简写 &
res = set1 & set2
print(res)# difference() 差集
res = set1.difference(set2)
print(res)
# 简写 -
res = set1 - set2
print(res)# union() 并集
res = set1.union(set2)
print(res)
# 简写 |
res = set1 | set2
print(res)# symmetric_difference() 对称差集 (补集情况涵盖在其中)
res = set1.symmetric_difference(set2)
print(res)
# 简写 ^
res = set1 ^ set2
print(res)set1 = {"周星驰","刘德华","成龙","张学友"}
set2 = {"周星驰","刘德华"}# issubset() 判断是否是子集
res = set1.issubset(set2)
print(res)
# 简写 <
res = set1 < set2
print(res)# issuperset() 判断是否是父集
res = set1.issuperset(set2)
print(res)
# 简写 >
res = set1 > set2
print(res)# isdisjoint() 检测两集合是否不相交 不相交 True 相交 False
res = set1.isdisjoint(set2)
print(res)
2. 集合相关的函数
1. 增
add() 向集合中添加数据 (一次加一个)
setvar = {"神秘男孩","金角大王"} setvar.add("银角大王") print(setvar)
update() 向集合中迭代增加数据 (一次加一堆)
setvar = {"神秘男孩","金角大王"} strvar = ("小明","小红") setvar.update(strvar) print(setvar)
2. 删
clear() 清空集合
setvar = {"神秘男孩","金角大王","银角大王"} setvar.clear() print(setvar)
pop() 随机删除集合中的一个数据
setvar = {"神秘男孩","金角大王","银角大王"} res = setvar.pop() print(res)
remove() 删除集合中指定的值 (不存在则报错) => 了解即可
setvar = {"神秘男孩","金角大王","银角大王"} setvar.remove("神秘男孩") print(setvar)
discard() 删除集合中指定的值 (不存在的不删除) => 推荐使用
setvar = {"神秘男孩","金角大王","银角大王"} setvar.discard("神秘男孩") setvar.discard("神秘男孩666") print(setvar)
3. 冰冻集合
frozenset 可强转容器类型数据变为冰冻集合
冰冻集合一旦创建,不能进行任何修改,只能做交叉并补操作
lst1 = ["王闻",18,"男性","爱好:跑步"] fz1 = frozenset(lst1)lst2 = ("王闻","地址:包头","买一辆特斯拉9.9包邮") fz2 = frozenset(lst2)print(fz1,type(fz1)) print(fz2,type(fz2))# 不能够在冰冻集合当中添加或者删除元素 # fz1.add(123) error # 只能交叉并补print( fz1 & fz2 ) print( fz1 - fz2 )
练习
练习1
li = ["alex", "WuSir", "xboy", "oldboy"]
列表中追加元素"seven",并输出添加后的列表
li = ["alex", "WuSir", "xboy", "oldboy"] li.append("seven") print(li)
请在列表的第1个位置插入元素"Tony",并输出添加后的列表
li = ["alex", "WuSir", "xboy", "oldboy"] li.insert(0,"Tony") print(li)
请修改列表第2个位置的元素为"Kelly",并输出修改后的列表
li = ["alex", "WuSir", "xboy", "oldboy"] li[1] = "Kelly" print(li)
请将列表l2=[1,“a”,3,4,“heart”]的每一个元素添加到列表li中,一行代码实现,不允许循环添加。
li = ["alex", "WuSir", "xboy", "oldboy"] l2=[1,"a",3,4,"heart"] li.extend(l2) print(li)print(li + l2)
请将字符串s = "qwert"的每一个元素添加到列表li中,一行代码实现,不允许循环添加。
li = ["alex", "WuSir", "xboy", "oldboy"] s = "qwert" li.extend(s) print(li)
请删除列表中的元素"alex",并输出删除后的列表
li = ["alex", "WuSir", "xboy", "oldboy"] li.remove["alex"] print(li)
请删除列表请删除列表中的第2至4个元素,并输出删除元素后的列表
li = ["alex", "WuSir", "xboy", "oldboy"] del li[1:] del li[1:4] print(li)
删除列表中的第2个元素,并输出删除的元素和删除元素后的列表
li = ["alex", "WuSir", "xboy", "oldboy"] res = li.pop(1) print(res) print(li)
请将列表所有得元素反转,并输出反转后的列表
li = ["alex", "WuSir", "xboy", "oldboy"] li.reverse() print(li)
请计算出"alex"元素在列表li中出现的次数,并输出该次数。
li = ["alex", "WuSir", "xboy", "oldboy"]
res = li.count("alex")
print(res)
练习2
写代码,有如下列表,利用切片实现每一个功能
li = [1, 3, 2, “a”, 4, “b”, 5,“c”]
通过对li列表的切片形成新的列表l1,l1 = [1,3,2]
li = [1, 3, 2, "a", 4, "b", 5,"c"] print(list(li[:3]))
通过对li列表的切片形成新的列表l2,l2 = [“a”,4,“b”]
li = [1, 3, 2, "a", 4, "b", 5,"c"] print(list(li[3:6]))
通过对li列表的切片形成新的列表l3,l3 = [1,2,4,5]
li = [1, 3, 2, "a", 4, "b", 5,"c"] print(list(li[::2]))
通过对li列表的切片形成新的列表l4,l4 = [3,“a”,“b”]
li = [1, 3, 2, "a", 4, "b", 5,"c"] print(li[1:6:2]) print(list(li[1:-2:2]))
通过对li列表的切片形成新的列表l5,l5 = [“c”]
li = [1, 3, 2, "a", 4, "b", 5,"c"] print(list(li[-1]))
通过对li列表的切片形成新的列表l6,l6 = [“b”,“a”,3]
li = [1, 3, 2, "a", 4, "b", 5,"c"] print(list(li[-3:0:-2]))
练习3
写代码,有如下列表,按照要求实现每一个功能。
lis = [2, 7, “k”, [“qwe”, 20, [“k1”, [“tt”, 3, “1”]], 89], “ab”, “adv”]
将列表lis中的"tt"变成大写
lis = [2, 7, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"] print(lis[3][2][1][0].upper())
将列表中的数字3变成字符串"100"
lis = [2, 7, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"] lis[3][2][1][1] = "100" print(lis)
将列表中的字符串"1"变成数字101
lis = [2, 3, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"] lis[3][2][1][-1] = 101 print(lis)
练习4
li = [“alex”, “eric”, “rain”]
利用下划线将列表的每一个元素拼接成字符串"alex_eric_rain"
li = ["alex", "eric", "rain"]
res = "_".join(li)
print(res)
练习5
利用for循环打印出下面列表的索引
li = ["alex", "WuSir", "xboy", "oldboy"]
for i in li:print(li.index(i))
练习6
利用for循环和range 找出50以内能被3整除的数,并将这些数插入到一个新列表中。
lst = []
for i in range(51):if i % 3 == 0:lst.append(i)
print(lst)
练习7
利用for循环和range从100~10,倒序将所有的偶数添加到一个新列表中,然后对列表的元素进行筛选,将能被4整除的数留下来
lst = []
for i in range(100,9,-2):if i % 4 == 0:lst.append(i)
print(lst)
练习8
查找列表li中的元素,移除每个元素的空格,并找出以"A"或者"a"开头,并以"c"结尾的所有元素,并添加到一个新列表中,最后循环打印这个新列表。
li = ["xboy ", "alexC", "AbC ", " egon ", " riTiAn ", "WuSir", " aqc"]
lst_new = []
for i in li:res = i.strip()if (res.startswith("A") or res.startswith("a")) and res.endswith("c"):lst_new.append(res)
print(lst_new)
练习9
敏感词列表 li = [“苍老师”, “东京热”, “武藤兰”, “波多野结衣”]
将用户输入的内容中的敏感词汇替换成等长度的*(苍老师就替换***),并添加到一个列表中;如果用户输入的内容没有敏感词汇,则直接添加到新列表中。
li = ["苍老师", "东京热", "武藤兰", "波多野结衣"]
lst = []
while True:strvar = input("请输入名字")# 如果按 q 直接退出if strvar.upper() == "Q":print(lst)break# 循环遍历替换敏感词for i in li:if i in strvar:strvar = strvar.replace(i,"*" * len(i))# 把所有过滤好的数据存放新的列表lst.append(strvar)
练习10
li = [1, 3, 4, “alex”, [3, 7, “23aa”,8, “xboy”], 5,(‘a’,‘b’)]
循环打印列表中的每个元素,并转化为小写,遇到列表则再循环打印出它里面的元素。
li = [1, 3, 4, "alex", [3, 7, "23aa",8, "xboy"], 5,('a','b')]
for i in li:# 判断类型是不是字符串if isinstance(i,str):print(i.lower())# 判断类型是列表或者元组elif isinstance(i,(list,tuple)):for j in i:# 判断是不是字符串类型if isinstance(j,str):print(j.lower())else:# 否则原型化打印print(j)else:print(i)
练习11
tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11,22,33)}, 44])
讲述元组的特性
可获取,不可修改,有序
请问tu变量中的第一个元素 “alex” 是否可被修改?
不可以
请问tu变量中的"k2"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 "seven"
列表 可以修改
tu[-1][2]["k2"].append("seven")
请问tu变量中的"k3"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 "Seven"
元组 不可修改
练习12
把字符串 “k:1|k1:2|k2:3|k3:4” 处理成字典 {‘k’:1,‘k1’:2…}
strvar = "k:1|k1:2|k2:3|k3:4"
dic = {}
lst = strvar.split("|")
print(lst) # ['k:1','k1:2','k2:3','k3:4']
for i in lst:k,v = i.split(":")dic[k] = v
print(dic) # {'k':'1','k1':'2','k2':'3','k3':'4'}
练习13
有如下值li= [11,22,33,44,55,66,77,88,99,90],
将大于 66 的值保存至字典的k1键中,
将小于 66 的值保存至字典的k2键中。
即: {‘k1’: 大于66的所有值列表, ‘k2’: 小于66的所有值列表}
li= [11,22,33,44,55,66,77,88,99,90]
dic = {"k1":[],"k2":[]}
for i in li:if i > 66:dic["k1"].append(i)elif i < 66: dic["k2"].append(i)
print(dic)
python-列表_字典_集合的相关函数_深拷贝和浅拷贝相关推荐
- 微课|Python列表、字典、集合、字符串对象常用方法串讲
推荐教材: <Python网络程序设计(微课版)>,ISBN:978-7-3025-8312-7,董付国,清华大学出版社,2021年8月出版 配套资源: 教学大纲.450页PPT.91个例 ...
- python列表,字典,集合
初识模块 import sysprint(sys.path)#查看化境变量print(sys.argv)#查看文件的相对路径,但是在pachrm中 会自动转为绝对路径 View Code import ...
- python.集合转列表_Python基础数据类型:元组、列表、字典、集合
你好,我是goldsunC. 让我们一起进步吧! 元组.列表.字典.集合 元组和列表是Python语言中非常重要的一部分内容,它们是Python中除了字符串以外的另两种序列结构,几乎在任何地方都少不了 ...
- 【Python基础】使用列表、字典和集合生成式来缩短代码
作者 | Philip Wilkinson 编译 | VK 来源 | Towards Datas Science 在使用Python将近一年的时间里,我经常遇到"生成式"这个词,但 ...
- python 列表、元组、集合、字典、循环遍历数据结构
python 列表.元组.集合.字典.数据结构的循环(整理自python文档) 列表-list-用方括号标注,逗号分隔的一组值 list 的 方法 对list添加.插入.删除.查找.排列.翻转 lis ...
- Python学习笔记:列表、字典与集合解析(List, Dict and Set Comprehensions)
Python学习笔记:列表.字典与集合解析(List, Dict and Set Comprehensions) 1.列表解析 最受喜爱的Python语言特性.过滤一个集合的元素生成一个新的列表. 一 ...
- Python序列 数据类型 创建方式 Tuple元组 Str字符串 List列表 dict字典 Set集合 range,zip,map,enumerate
Python 序列分类 数据类型 详细介绍 Python 主要数据类型: 元组Tuple, 字符串Str,列表List,字典Dict,集合Set 对比 元组Tuple 字符串Str 列表List 字典 ...
- python列表元组字典集合实验心得_python学习小总结(列表、元组、字典、集合、字符串)...
---恢复内容开始--- 一.列表(list) 1.添加 append():追加,在列表末尾添加元素. 列表名.append(添加的元素) extend():扩展,在列表末尾添加元素. 列表名.ext ...
- Day2 - Python基础2 列表、字典、集合 --转自金角大王
Day2 - Python基础2 列表.字典.集合 --转自金角大王 Posted on 2018-01-24 13:23 Byd_lei 阅读(41) 评论(0) 编辑 收藏 本节内容 列表.元组 ...
- python列表、字典、元组的用法及区别_python列表,字典,元组简单用法示例
本文实例讲述了python列表,字典,元组简单用法.分享给大家供大家参考,具体如下: 列表 #_*_ coding:utf-8 _*_ # 列表,定义在方括号的形式中,可以进行切片操作. #它没有固定 ...
最新文章
- python 面向对象:类,作用域
- c 递归下降识别程序_看动画轻松理解递归与动态规划
- mysql source导入慢,MySQL mysqldump与source导入慢怎么解决
- Go 语言设计与实现纸质书出版,为信仰补票
- 【第五周课后作业】“番茄工作法”软件创新性分析
- ubuntu 16.04 安装最新的 docker
- Android瀑布流照片墙实现,体验不规则排列的美感
- 自学python到什么程度可以找工作-Python学到什么程度就可以找工作?
- 金刚爸爸是这么教育金刚儿子的
- Hive内部表和外部表的区别详解
- 易语言 使用精易皮肤模块的 方法
- 什么是PLC软元件和软继电器
- excel取消隐藏_Excel教程:一键取消隐藏工作表
- 收官之战,年终的财务分析如何做?
- linux screen 环境变量,Linux 下 screen 使用方法
- ASCII Grid
- Linux系统学习了解计算机
- WIN10笔记本屏幕亮度无法调节,一直是最高亮度
- 联想服务器安全配置文件,适用于台式机的 Lenovo Service Engine(LSE)BIOS安全公告...
- 淮北市第四届机器人比赛_淮北市第三实验小学组织学生参加2020年淮北市中小学生机器人竞赛“果力WYAI人工智能挑战赛”...