前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >集合数据类型,拷贝,深拷贝,浅拷贝

集合数据类型,拷贝,深拷贝,浅拷贝

作者头像
小小咸鱼YwY
发布2019-07-24 15:46:00
6600
发布2019-07-24 15:46:00
举报
文章被收录于专栏:python-爬虫

5.9自我总结

1.集合数据类型

1.定义

用{}中间值用,隔开,且集合中元素排列是无序的,而且如果有相同元素会只保留一个

2.算法

1.必须掌握
1.长度len
代码语言:javascript
复制
set_1 = {1,2,3,4,5}
print(len(set_1))
#5
2.成员运算in和not in
代码语言:javascript
复制
#表示判断集合里面是否有某个值
set_1 = {1,2,3,4,5}
print(1 in set_1)
#True
print(100 in set_1)
#False
3.并集(union或者|)
代码语言:javascript
复制
#两个集合的集合综合,union或者|
set_1 = {1,2,3}
set_2 = {3,4,5}
set_3 = set_1.union(set_2)
set_4 = (set_1 | set_2)
print(set_3)
print(set_4)
#{1, 2, 3, 4, 5}

)

4.交集(intersection或者&)
代码语言:javascript
复制
set_1 = {1,2,3}
set_2 = {3,4,5}
set_3 = set_1.intersection(set_2)
set_4 = (set_1 & set_2)
print(set_3)
print(set_4)
#{2}

)

5差集(difference 或者 -)
代码语言:javascript
复制
set_1 = {1,2,3}
set_2 = {3,4,5}
set_3 = set_1.difference(set_2)
set_4 = (set_1 - set_2)
print(set_3)
print(set_4)
#{1,2}
http://images.cnblogs.com/cnblogs_com/pythonywy/1452728/o_%E5%B7%AE%E9%9B%86.jpg
http://images.cnblogs.com/cnblogs_com/pythonywy/1452728/o_%E5%B7%AE%E9%9B%86.jpg
6.对称差集
代码语言:javascript
复制
set_1 = {1,2,3}
set_2 = {3,4,5}
set_3 = set_1.symmetric_difference(set_2)
set_4 = (set_1 ^ set_2)
print(set_3)
print(set_4)
#{1, 2, 4, 5}
http://images.cnblogs.com/cnblogs_com/pythonywy/1452728/o_%E5%AF%B9%E7%A7%B0%E5%B7%AE%E9%9B%86.jpg
http://images.cnblogs.com/cnblogs_com/pythonywy/1452728/o_%E5%AF%B9%E7%A7%B0%E5%B7%AE%E9%9B%86.jpg
7.集合内容是否相同(==)
代码语言:javascript
复制
set_1 = {1,2,3}
set_2 = {3,4,5}
print(set_1 == set_2)
#False
8.父集(>或者>=或者issuperset)
代码语言:javascript
复制
set_1 = {1,2,3}
set_2 = {1,2,3}
set_3 = set_1.issuperset(set_2) #issuperset与>=意思相同 
set_4 = (set_1 > set_2) #如果set_2 = {2},结果也为True
print(set_3)  #True
print(set_4)   #False
9.子集(<或者)
代码语言:javascript
复制
set_1 = {1,2,3}
set_2 = {1,2,3}
set_3 = set_1.issubset(set_2) #issubset与<=意思相同 
set_4 = (set_1 < set_2) #如果set_2 = {2},结果也为True
print(set_3)  #True
print(set_4)   #False
2.掌握
1.add

添加,打印添加时候回返回None

2.remove

移除,打印添加时候回返回None,找不到移除的内容会报错

3.difference_update

删除相同的值 打印添加时候回返回None

4.discard

移除,打印添加时候回返回None,找不到移除的内容也会返回None

5.isdisjoint

判断有无交集

3.一个值或多个值

一个值

4,有序的或无序的

无序的

5.可变的或不可变

可变

2.深拷贝,浅拷贝,拷贝

比如说A拷贝B,A里面的值发送变化时候B也会发生变化,浅拷贝和深拷贝一般出现在一个变量里有多个元素,有可变的元素和不可变的元素,比如若说A浅拷贝B,其中B可变元素变了,A也变了,B中不可变元素变了,A不会变,深拷贝则是,其中不管哪个元素变了后,两者互不影响受限。

3.今日题目

第一部分

有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合。

代码语言:javascript
复制
pythons={'jason','nick','sean','tank','gangdan','tiepao'}
linuxs={'tank','oldboy','gangdan'}

1.求出即报名python又报名linux课程的学员名字集合

代码语言:javascript
复制
pythons={'jason','nick','sean','tank','gangdan','tiepao'}
linuxs={'tank','oldboy','gangdan'}
pythons_linuxs = pythons & linuxs
print(pythons_linuxs)   

2.求出所有报名的学生名字集合

代码语言:javascript
复制
pythons={'jason','nick','sean','tank','gangdan','tiepao'}
linuxs={'tank','oldboy','gangdan'}
pythons_linuxs = pythons | linuxs
print(pythons_linuxs)

3.求出只报名python课程的学员名字

代码语言:javascript
复制
pythons={'jason','nick','sean','tank','gangdan','tiepao'}
linuxs={'tank','oldboy','gangdan'}
pythons_linuxs = pythons - linuxs
print(pythons_linuxs)

4.求出没有同时这两门课程的学员名字集合

代码语言:javascript
复制
pythons={'jason','nick','sean','tank','gangdan','tiepao'}
linuxs={'tank','oldboy','gangdan'}
pythons_linuxs = pythons ^ linuxs
print(pythons_linuxs)

第二部分

1.有列表l=['a','b',1,'a','a'],列表元素均为可hash类型,去重,得到新列表,且新列表无需保持列表原来的顺序

代码语言:javascript
复制
#去重
l=['a','b',1,'a','a']
new_l = set(l)

2.在上题的基础上,保存列表原来的顺序

代码语言:javascript
复制
#第一种,想法,先用SET把他变成有序,再找到相同的删掉在原来的位置,后面循环发现删了后索引没法索引,就根据长度再套了个循环
l=['a','b',1,'a','a']
l_2 = set(l)
while len(l) != len(l_2):
    for v_1 in range(len(l)):
        for v_2 in range(1,len(l)):
            if l[v_1] == l[v_2]:
                d = v_2
                break
    del l[d]
print(l)
#第二种 做第三题发现里面有字典没法转换成set,想到这样,后来发现这样就可以了。。
l_2 = []
for A in l:
    if A not in l_2:
        l_2.append(A)
print(l_2)

3.有如下列表,列表元素为不可hash类型,去重,得到新列表,且新列表一定要保持列表原来的顺序

代码语言:javascript
复制
l=[
    {'name':'nick','age':18,'sex':'male'},
    {'name':'tank','age':73,'sex':'male'},
    {'name':'nick','age':20,'sex':'female'},
    {'name':'nick','age':18,'sex':'male'},
    {'name':'nick','age':18,'sex':'male'},
]
代码语言:javascript
复制
#第一种
l=[
    {'name':'nick','age':18,'sex':'male'},
    {'name':'tank','age':73,'sex':'male'},
    {'name':'nick','age':20,'sex':'female'},
    {'name':'nick','age':18,'sex':'male'},
    {'name':'nick','age':18,'sex':'male'},
]
l_2 = []
for A in l:
    if A not in l_2:
        l_2.append(A)
while len(l) != len(l_2):
    for v_1 in range(len(l)):
        for v_2 in range(1,len(l)):
            if l[v_1] == l[v_2]:
                d = v_2
                break
    del l[d]
print(l)
#第二种 由于列表里有字典没法SET,然后想到这样加进去,后面就这样了
l_2 = []
for A in l:
    if A not in l_2:
        l_2.append(A)
print(l_2)

第三部分

  1. 请简述拷贝、浅拷贝、深拷贝三者之间的区别:
代码语言:javascript
复制
比如说A拷贝B,A里面的值发送变化时候B也会发生变化,浅拷贝和深拷贝一般出现在一个变量里有多个元素,有可变的元素和不可变的元素,比如若说A浅拷贝B,其中B可变元素变了,A也变了,B中不可变元素变了,A不会变,深拷贝则是,其中不管哪个元素变了后,两者互不影响受限。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-05-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 5.9自我总结
    • 1.集合数据类型
      • 1.定义
      • 2.算法
      • 3.一个值或多个值
      • 4,有序的或无序的
      • 5.可变的或不可变
    • 2.深拷贝,浅拷贝,拷贝
      • 3.今日题目
        • 第一部分
        • 第二部分
        • 第三部分
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档