python中的set集合和深浅拷贝
2024-09-01 01:18:29
一.基础数据类型的补充
1.str中的join算法,将列表转换成字符串,并用'_'(或其他)
li=['李嘉诚','马化腾','刘嘉玲','黄海峰',]
s='_'.join(li)
print(s) #李嘉诚_马化腾_刘嘉玲_黄海峰
2.循环删除列表中的每个元素
li=['李嘉诚','马化腾','刘嘉玲','黄海峰',]
for el in li:
li.remove(el)
print(li) #['马化腾', '黄海峰']
原因分析:for循环在运行过程中会有一个指针记录当前循环的元素是哪一个.
方法一:
li=['李嘉诚','马化腾','刘嘉玲','黄海峰',]
for i in range(0,len(li)):
li.pop() #括号中什么也不写,默认删除最后一个
print(li) #[]
方法二:删除元素会导致列表中元素的索引发生改变,所以容易出现问题.
li=['李嘉诚','马化腾','刘嘉玲','黄海峰',]
del_li=[]
for el in li:
del_li.append(el) #用另一个列表来记录我要删除的内容
for el in del_li: #循环另一个列表
li.remove(el) #把原列表中的每一个元素对应删除
print(li) #[]
字典也是如此:
dic = {"提莫":"冯提莫", "发姐":"陈一发儿", "55开":"卢本伟"}
lis=[]
for el in dic:
lis.append(el)
for el in lis:
dic.pop(el)
print(dic) #{}
3.dict中的元素在迭代的过程中是不允许进行删除的,要想删除,就要把想删除的元素暂时保存在一个list中,在循环list删除.
dic = {"提莫":"冯提莫", "发姐":"陈一发儿", "55开":"卢本伟"}
lis=[]
for el in dic:
if el.startswith('提'):
lis.append(el)
for el in lis:
dic.pop(el)
print(dic) #{'发姐': '陈一发儿', '55开': '卢本伟'}
4.dict中的dict.fromkeys(),可以帮助我们通过list创建一个dict
a','b'],['c','d'])
print(dic) #{'a': ['c', 'd'], 'b': ['c', 'd']} 前面的迭代被作为字典的键,后面的被作为字典的value
5.字符串和列表的相互转换
把字符串转换成列表:split()
把列表转换成字符串:join()
二.set集合
特点:set中的元素是无序的,不重复的,里面的元素必须是可hash的(int,str,tuple,bool),set就是字典类型的数据,但是不保存value.set用{}表示.
注意:set集合中的元素必须是可hash的,但是set本身是不可hash的.
不可重复,无序(一般用来去重):
s={'','',''}
print(s) #第一次运行{'1', '2'} 第二次运行{'2', '1'}
1.增
(1) s.add():
s={'刘嘉玲','张曼玉','王祖贤'}
s.add('美丽的我')
s.add('王祖贤') #重复的内容不会添加到set中
print(s) #{'刘嘉玲', '美丽的我', '王祖贤', '张曼玉'}
(2) s.update():
s={'刘嘉玲','张曼玉','王祖贤'}
s.update('马化腾') #迭代添加
print(s) #{'化', '刘嘉玲', '张曼玉', '腾', '王祖贤', '马'}
2.删
(1) s.pop()
s={'刘嘉玲','张曼玉','王祖贤'}
# a=s.pop() #随机删除一个
# print(a)
# print(s)
(2) s.remove()
s={'刘嘉玲','张曼玉','王祖贤'}
# s.remove('刘嘉玲') #直接删除指定元素,如果不存在会报错
# print(s)
(3) s.clear()
s={'刘嘉玲','张曼玉','王祖贤'}
s.clear()
print(s) #set()
3.改
set中的数据没有索引,所以没有办法定位一个元素,因此没有办法进行直接修改.
我们可以采用先删除后添加的方式进行修改
#把刘嘉玲改成赵本山
s={'刘嘉玲','张曼玉','王祖贤'}
s.remove('刘嘉玲') #删除
s.add('赵本山') #添加
print(s) #{'赵本山', '张曼玉', '王祖贤'}
4.查
用for循环进行查看
s={'刘嘉玲','张曼玉','王祖贤'}
for el in s: #王祖贤
print(el) #刘嘉玲
#张曼玉
5.常用操作
s1={'刘能','赵四','皮长山'}
s2={'刘科长','冯科长','皮长山'}
print(s1 & s2) #交集
print(s1.intersection(s2)) #交集 print(s1 | s2) #并集
print(s1.union(s2)) #并集 print(s1 - s2) #差集
print(s1.difference(s2)) #差集 print(s1 ^ s2) #反差集
print(s1.symmetric_difference(s2)) #反差集 print(s1 < s2) #子集
print(s1.issubset(s2)) #子集 print(s1 > s2) #超集
print(s1.issuperset(s2)) #超集
三.深浅拷贝
1. 赋值. 没有创建新对象. 公用同一个对象
2. 浅拷贝. 拷贝第一层内容. [:]或copy()
lst1=['何炅','杜海涛','谢娜',['李维嘉']]
lst2=lst1.copy()
print(lst1) #2571062967176
print(lst2) #2571062967176
print(id(lst1[3])) # print(id(lst2[3])) #
3. 深拷贝. 拷贝所有内容. 包括内部的所有.
import copy
lst1=['何炅','杜海涛','谢娜',['李维嘉']]
lst2=copy.deepcopy(lst1)
print(lst1)
print(lst2)
print(id(lst1),id(lst2)) #3135828524616 3135828628360
最新文章
- svn自动update到指定目录
- centos7下使用yum安装mysql
- JS原型的问题Object和Function到底是什么关系
- liunx 系统 git clone ssh代码时需要sshkey
- node.js整理 07例子
- 我们一起学SASS
- Mysqldump参数大全
- Data Flow ->;>; Pivot
- linux 线程函数大全
- cocos2d-x学习日志(12) --弹出对话框的设计与实现
- JNDI实现服务器(tomcat)与数据库(mysql)连接的数据源配置以及获取连接的java代码
- Thinkphp代码生成工具 ThinkphpHelper
- SpringBoot 中常用注解
- LeetCode之“排序”:Largest Number
- 从0到1打造自己的VOIP网络电话系统(基于FreePBX)
- 二进制入门-打造Linux shellcode基础篇
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十):接口服务整理
- 2018 - 2019 CTU Open Contest E. Locker Room 【后缀数组】
- CAS (2) —— Mac下配置CAS到Tomcat(客户端)
- vue项目打包部署到nginx 服务器上