set集合 , 深浅拷⻉以及部分知识点补充

⼀. 基础数据类型补充

1. join() 加入

  • split的逆反 把列表转化为字符串 ,也可以遍历字符串
  • 不能是整型
  • 用于转换类型
join 是遍历(迭代)方式添加li = ["李嘉诚", "麻花藤", "⻩海峰", "刘嘉玲"]
s = "_".join(li)
print(s)  # 打印结果 李嘉诚_麻花藤_⻩海峰_刘嘉玲
li = "⻩花⼤闺⼥"
s = "_".join(li)
print(s)   # 打印结果 ⻩_花_⼤_闺_⼥

2. 删除

1. 删除列表list :

  • 直接循环列表删除列表中的每⼀个元素是不可能删除干净的.
lst = ["渣渣辉", "古天绿", "陈小春", "彭佳慧", "郑中基", "胡辣汤"]
new_lst = []
for el in lst:new_lst.append(el)
for el in new_lst:lst.remove(el)print(lst)
  • 或者 从后往前删除(倒序)
for i in range(0, len(li)): # 循环len(li)次, 然后从后往前删除li.pop()
print(li)

2. 删除字典dict :

  • dict中的元素在迭代过程中是不允许进⾏删除的
  • 把要删除的元素暂时先保存在⼀个list中, 然后循环list, 再删除

3. fromkeys (从键) 类似浅拷贝

  • dict字典里keys共享value
  • dict中的fromkey(),可以帮我们通过list来创建⼀个新的dict
  • 格式 dic = dict.fromkeys(key(或者keys),value)
dic = dict.fromkeys(["jay", "JJ"], ["周杰伦", "麻花藤"])
print(dic)
结果:
{'jay': ['周杰伦', '麻花藤'], 'JJ': ['周杰伦', '麻花藤']}

注意fromkeys的坑:

dic = dict.fromkeys(["jay", "JJ"], ["周杰伦", "麻花藤"])
print(dic)
dic.get("jay").append("胡⼤")
print(dic)
结果:
{'jay': ['周杰伦', '麻花藤', '胡⼤'], 'JJ': ['周杰伦', '麻花藤', '胡⼤']}
# 代码中只是更改了jay那个列表. 但是由于jay和JJ⽤的是同⼀个列表. 所以. 前⾯那个改了. 后⾯那个也会跟着改

4. 类型转换

  • 字符串转换数字str =>int 字符串必须都是十进制的数字

  • 数字转换为字符串 直接转换

  • 元组 => 列表 list(tuple)

  • 列表 => 元组 tuple(list)

  • 列表 => 字符串 list=>str str.join(list) 可迭代对象不能出现数字

  • 字符串=> 列表 str=>list str.split()

  • 转换成False的数据: 0,'',None,[],(),{},set() ==> False

  • 除了字典外,容器数据类型之间可以直接互相转换

  • 字典不可以转换

5. set (集合) 可以去重复

空集合 set = set()

  • set集合是python的⼀个基本数据类型. ⼀般不是很常用.
  • set中的元素是不重复的无序的.无序就没有索引
  • 里面的元素必须是可hash的(),
  • set就是

1. 去重

# 给list去重复
# 运用类型转换
lst = [45, 5, "哈哈", 45, '哈哈', 50]
lst = list(set(lst)) # 把list转换成set, 然后再转换回list
print(lst)

2. set的增删改查

add 添加

s = {"刘嘉玲", '关之琳', "王祖贤"}
s.add("郑裕玲")
print(s)
s.add("郑裕玲") # 重复的内容不会被添加到set集合中
print(s)
# "刘嘉玲", '关之琳',"郑裕玲","王祖贤"(set是无序的)

update (迭代添加)

s = {"刘嘉玲", '关之琳', "王祖贤"}
s.update("麻花藤") # 迭代更新
print(s)
# 打印结果: '藤', '刘嘉玲', '麻', '关之琳', '花', '王祖贤'
s.update(["张曼⽟", "李若彤","李若彤"])
print(s)
# 打印结果: '张曼⽟', '关之琳', '李若彤', '王祖贤', '刘嘉玲'

pop 随机弹出

s = {"刘嘉玲", '关之琳', "王祖贤","张曼⽟", "李若彤"}
item = s.pop() # 随机弹出⼀个.
print(s)
print(item)# 删除目标不固定

remove 指定删除(不存在会报错)

s.remove("关之琳") # 直接删除元素
# s.remove("⻢⻁疼") # 不存在这个元素. 删除会报错
print(s)

clear 清空

s.clear()
# 清空set集合.需要注意的是set集合如果是空的. 打印出来是set() 因为要和 dict区分的.
print(s) # set()

改 (先remove后add)

  • set没有索引,只能先remove,然后add
# set集合中的数据没有索引. 也没有办法去定位⼀个元素. 所以没有办法进⾏直接修改.
# 我们可以采⽤先删除后添加的⽅式来完成修改操作
s = {"刘嘉玲", '关之琳', "王祖贤","张曼⽟", "李若彤"}
# 把刘嘉玲改成赵本⼭
s.remove("刘嘉玲")
s.add("赵本⼭")
print(s)

查 (for循环迭代)

# set是⼀个可迭代对象. 所以可以进⾏for循环
for el in s:print(el)

3.常用操作

交集 intersection / &

并集 union / |

差集 difference / -

反交集 symmetric_difference / ^

⼦集 issubset / <

超集 issuperset / >

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)) # {'冯乡⻓', '刘能', '刘科⻓', '赵四'}
s1 = {"刘能", "赵四"}
s2 = {"刘能", "赵四", "⽪⻓⼭"}
# ⼦集
print(s1 < s2) # set1是set2的⼦集吗? True
print(s1.issubset(s2))
# 超集
print(s1 > s2) # set1是set2的超集吗? False
print(s1.issuperset(s2))

frozenset (冻结集)

  • set集合本⾝是可以发⽣改变的. 是不可hash的. 我们可以使⽤frozenset来保存数据.
frozenset是不可变的. 也就是⼀个可哈希的数据类型
s = frozenset(["赵本⼭", "刘能", "⽪⻓⼭", "⻓跪"])
dic = {s:'123'} # 可以正常使⽤了
print(dic)

二.深浅拷贝

可变类型 : list dict set 里有嵌套会体现出深浅拷贝的id指向不同

不可变类型 : str int bool 数据类型 (最深层数据,在小数据池里)

浅拷贝 : 只拷贝最外层数据(只复制第一层)

深拷贝 : 除了最深层不可变的不拷贝,其他可变路径都拷贝(拷贝可变的数据类型)

import copy # 调用copy 不然运行不了
a=[1,2,3,[4,5],6]
b=a
c = copy.copy(a)     # 浅拷贝
d = copy.deepcopy(a) # 深拷贝
b.append(10)
c[3].append(11)
d[3].append(12)
print(a)  # [1,2,3,[4,5,11],6,10] 单一复制一方变都变
print(b)  # [1,2,3,[4,5,11],6,10] 单一复制一方变都变
print(c)  # [1,2,3,[4,5,11],6]  浅拷贝只拷贝最外面一层,
print(d)  # [1,2,3,[4,5,12],6]  深拷贝会拷贝到[4,5](即除不可变外所有a的内容)
例 : 浅拷贝
l2 = l1[:]
l2 = l1.copy

深浅拷贝的规律:

  • 赋值: 两个变量使用的是同一个空间

  • 浅拷贝:修改不可变数据类型,不变动,修改可变数据类型,变动

  • 深拷贝:修改就不变动

转载于:https://www.cnblogs.com/fanxss/p/10988106.html

集合(set) 深浅拷贝相关推荐

  1. 数据池,集合及深浅拷贝

    数据池,集合及深浅拷贝 小数据池(python中一种提高效率的方式,固定数据类型使用同一个内存地址) 支持str,int,bool id 查看空间的内存地址 获取开辟空间的一种地址 print(id( ...

  2. set集合和深浅拷贝

    set集合 特点: 无序, 不重复, 元素必须可哈希(不可变) 作用: 去重复 本身是可变的数据类型. 有增删改查操作. frozenset()冻结的集合. 不可变的. 可哈希的三. 深浅拷贝 1. ...

  3. 集合、深浅拷贝、文件操作(读、写、追加)函数初识(参数)

    小数据池 #int ==比较数值 is 比较内存地址 id 测试内存地址 #str 不能含有特俗字符 单个元素*数字,不能超过21 i1 = 'a'*20 i = 'a'*20 id一样 i1 = ' ...

  4. Python之基础数据补充、set集合和深浅拷贝

    基础数据补充 字符串的常用操作         1. join() li = ["李嘉诚", "麻花藤", "⻩海峰", "刘嘉玲 ...

  5. set集合、深浅拷贝以及部分知识点补充

    基础数据类型补充 字符串的拼接 lis = ["李嘉诚", "麻花藤", "黄海峰", "刘嘉玲"]s = " ...

  6. 基本数据类型补充、set集合、深浅拷贝

    基本数据类型的补充 1,关于int和str在之前的学习中已经介绍了80%以上了,现在再补充一个字符串的基本操作 str.join(可迭代对象): li = ['李嘉诚','何炅','海峰','刘嘉玲' ...

  7. python之set集合、深浅拷贝

    一.基本数据类型补充 1,关于int和str在之前的学习中已经介绍了80%以上了,现在再补充一个字符串的基本操作: li = ['李嘉诚','何炅','海峰','刘嘉玲']s = "_&qu ...

  8. python里clear和copy_python (集合和深浅拷贝)

    一. 知识点补充 1. 列表和字典不能在循环过程中进行增删操作,因为列表索引在循环过程会发生改变,字典规定循环不可改变. 删除方法: 将需要大量删除的列表或者字典遍历取出要删除的对象,放入一个空列表, ...

  9. 编码,深浅拷贝和文件操作

    三.再谈编码 小数据池,  常量池, id() 查看变量的内存地址 is和== is 判断内存地址是否一致 == 判断内容是否一致 小数据池的作用: 为了快速的创建字符串对象, 可以减少内存的浪费 用 ...

最新文章

  1. spark mysql 驱动_spark读取mysql数据库的驱动问题
  2. win7磁盘清理_window7越来越卡?系统残余文件太多,磁盘清理可以搞定!!
  3. VS打开文件,解决方案资源管理器自动定位到文件位置
  4. new,is和as运算符解析及运行时类型,对象,线程堆栈,托管堆之间的联系
  5. python连不上树莓派_树莓派respberry中cmake编译链接python2.7库不成功,求教
  6. C++实现String类
  7. 罗永浩:比起悲剧英雄 我更喜欢被当成失败的小丑
  8. 阶段3 1.Mybatis_01.Mybatis课程介绍及环境搭建_02.三层架构和ssm框架的对应关系
  9. win10c盘android,Win10系统C盘哪些文件可以删除?C盘无用文件都在哪?
  10. Mac securecrt 破解版安装
  11. 随机过程 Class 3 条件期望
  12. 阳春三月,花开醉满青春
  13. Java九阳神功-抽象方法与抽象类
  14. OSPF协议邻居(Neighbor)与邻接(Adjacency)关系
  15. 车载网络测试 - 车载以太网 - ARP详细解析
  16. SpringCloud个人小总结
  17. 如何查看自己WiFi密码
  18. hdu5454 Excited Database (线段树)
  19. python小孩子_python 给小孩起名
  20. 靶场发展态势③美国防部赛博安全靶场(IAR/CSR)

热门文章

  1. PyTorch:torch.nonzero——非零元素的定位
  2. python文件处理pdf_Python用于NLP :处理文本和PDF文件
  3. nyoj 543 遥控器 第五届河南省程序设计大赛
  4. 知乎好物推荐怎么做赚钱?该如何做?
  5. 外媒所言非虚,苹果降价或许是真的在清库存
  6. 电脑删除文件找不到该项目怎么解决
  7. Shiro 入门笔记,整合SpringBoot,Redis
  8. 服务器搭建邮件自动回复,爆笑的邮件自动回复内容,邮件自动回复心理
  9. 二进制数据文件中的字符串替换的实现(C++)
  10. 删除电脑上重复备份的图片