python---內建数据结构set

# -*- coding: utf-8 -*-
'''
内置数据结构 --- set
'''
'''
set(集合)
- 一堆确定的无序的唯一的数据,集合中的每一个数据称为一个元素
'''

#集合的创建
s = set()
print(type(s))
print(s)

#此时,大括号内一定要有值,否则定义出的是一个dict
s = {1, 3, 5, 6, 7, 8}

#如果只是用大括号定义,则定义的是一个dict类型
d = {}
print(type(d))
print(d)


'''
1、集合的特征
	集合内数据无序,即无法使用索引和分片
	集合内部数据元素具有唯一性,可以用来排除重复数据
	集合内的数据,str、int、float、tuple、冰冻集合,即内部只能
	放置可哈希的数据
    
简要的说可哈希的数据类型,即不可改变的数据结构(字符串str、元组tuple、对象集objects)。 
为什么说字符串是可哈希的,因为字符串本来就不是可变的,a=’1’ a=’2’,实际上是a的指针变化了,
从’1’的内存地址 指向了 ‘2’ 的内存地址,我们通过检查一下对象内存地址来简要解释一下:
str1 = '1'
print(id(str1))

str1 = '2'
print(id(str1))
# - 输出
79192448
92888512
# - 可见 str1的指针指向的内存地址发生了改变
# - 实际上'1','2'一旦存在,只要不销毁,内存地址一直不会发生改变
# - 故而字符串 可哈希123456789101112

那么同理,不可哈希的数据类型,即可改变的数据结构 (字典dict,列表list,集合set)
'''

'''
2、集合序列操作
    成员检测
    遍历操作 
    带有元组的集合遍历
'''
s = {1, 2, 3, "action", "4"}
print(s)
if "action" in s:
    print("Yes")
for i in s:
    print(i)
s = {(1, 2, 3), ("action", "4", "sss")} 
for k,m,n in s:
    print(k, "--", m, "--", n)

'''
3、集合的内涵
    普通集合内涵
    带条件集合内涵
    多循环的集合内涵
'''
s = {123, 223, 545, 3, 34, 445, 555, 67, 3, 445, 23, 223}
print(s)
ss = {i for i in s}
print(ss)
sss = {i for i in s if i % 2 == 0}
print(sss)
s1 = {1, 2, 3, 4}
s2 = {"a", "b", "c"}
s = {m * n for m in s1 for n in s2 if m == 2}
print(s)

'''
4、关于集合的函数
    len、max、min、set(生成一个集合)
    add: 因为集合无序,无append函数,有add函数
    clear:清空set中的值
    copy: 拷贝
    remove:  移除集合中指定的值,直接改变原有值,如果移除的值不存在,报错
    discard: 移除集合中指定的值,直接改变原有值,如果移除的值不存在,不报错
    pop: 随机移除一个元素
'''
s = {1, 2, 3, 4, 5, 6, 7, 8, 9, 9}
print(len(s))
print(max(s))
print(min(s))

l = [1, 2, 3, 4, 5]
s = set(l)
print(s)

s.add(67)
print(s)
s.add(2)
print(s)

s = {2, 5, 6, 7}
print(id(s))
s.clear()
print(id(s))

#remove和discard区别(“脾气不好”和“脾气好”)
ss = {23, 45, 67, 66, 78, 78, 15, 45}
print(ss)
ss.remove(45)
print(ss)
ss.discard(45)
print(ss)

s = {23, 455, 67, 89}
b = s.pop()
print(b)
print(s)

'''
5、关于集合的操作的函数
    intersection:    交集
    difference:      差集
    union:           并集
    issubset:        检查一个集合是否为另一个子集
    issuperset:      检查一个集合是否为另一个的超集
'''
s1 = {1, 2, 3, 4, 5, 6}
s2 = {4, 5, 6, 7, 8, 9}
s_1 = s1.intersection(s2)
print(s_1)
s_2 = s1.difference(s2)
print(s_2)
s_3 = s1.union(s2)
print(s_3)
s_4 = s1.issubset(s2)
print(s_4)
s_5 = s1.issuperset(s2)
print(s_5)

'''
6、关于集合的数学操作的函数
    - is ok, + is not allowed
'''
s = {1, 2, 3}
ss = {1, 1}
s_1 = ss - s
print(s_1)
s_2 = s - ss
print(s_2)

'''
7、frozen set:冰冻集合,就是不可以进行任何修改的集合
'''
s = frozenset({1, 2, 3})
print(type(s))
print(s)
ss = {1, 2, 3, 4}
s_1 = ss - s
print(s_1)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值