42_集合_集合的创建和删除_frozenset_不可变集合类型


42.集合

resource

集合官方文档-Python-中文

简介

A set 对象是distinct的无序集合 hashable 物体。常见的用途包括成员资格测试从序列中删除重复项以及计算数学运算,如交集、并集、差分和对称差分。(对于其他容器,请参见内置的 dict , list 和 tuple 课程,以及 collections 模块。

与其他集合一样,集合支持x in set , len(set)for x in set.作为无序集合,集合不记录元素位置或插入顺序。因此,集合不支持索引、切片或其他类似序列的行为

目前有两种内置的集合类型, setfrozenset . 这个 set 类型是可变的—可以使用如下方法更改内容 add()remove() . 因为它是可变的,所以它没有hash值不能用作字典键或另一个集合的元素

这个 frozenset 类型不可变且 hashable —其内容创建后不能更改,因此可以用作字典键或其他集合的元素。( 这个frozenset 下一节会讲)

集合是无序可变元素不能重复。实际上,集合底层是字典实现,集合的所有元素都是字典 中的“键对象”因此是不能重复的且唯一

集合创建和删除

  1. 使用{ }创建集合对象,并使用 add()方法添加元素
>>> a = {3,5,7}
>>> a 
{3, 5, 7} 
>>> a.add(9) 
>>> a 
{9, 3, 5, 7}
  1. 使用set(),将列表、元组等可迭代对象转成集合。如果原来数据存在重复数据,则只保 留一个
>>> a = ['a','b','c','b']
>>> b = set(a) 
>>> b
{'b', 'a', 'c'}
  1. remove()删除指定元素;clear()清空整个集合
>>> a = {10,20,30,40,50} 
>>> a.remove(20) 
>>> a
{10, 50, 30}

集合相关操作

像数学中概念一样,Python对集合也提供了并集、交集、差集等运算。

我们给出示例:

>>> a = {1,3,'onepis'}
>>> b = {'he','it','onepis'}
>>> a|b #并集
{1, 3, 'onepis', 'he', 'it'}
>>> a&b #交集
{'onepis'}
>>> a-b #差集 
{1, 3}
>>> a.union(b) #并集
{1, 3, 'onepis', 'he', 'it'}
>>> a.intersection(b) #交集
{'onepis'} 
>>> a.difference(b) #差集
{1, 3}

目前有两种内置集合类型setfrozenset . 这个 set 类型是可变的—可以使用如下方法更改内容 add()remove(). 因为它是可变的,所以它没有hash值,不能用作字典键另一个集合的元素。这个 frozenset类型不可变且 hashable —其内容创建后不能更改,因此可以用作字典键或其他集合的元素

如下 实验
aaa 是普通的 set 所以 作为 字典的键的时候 报错了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e1WecQ5y-1597317700094)(5E9AC941AA6D472186D01BE5A11E4550)]

顺便说一下关于成员测试函数 issubset



In [89]: {"a","b"}.issubset(a)
Out[89]: True

In [90]: {"a","b"}.issubset(["a","b","c"])
Out[90]: True
# {"a","b"} 这里只能是集合
# 后面 subset 传入参数 可以是 列表 集合 字典等类型
In [91]: {"a","b"}.issubset(("a","b","c"))
Out[91]: True

In [92]: {"a","b"}.issubset({"a","b","c"})
Out[92]: True

In [93]: {"a","b"}.issubset({"a":1,"b":2,"c":3})
Out[93]: True

# 当然如果 只有一个元素 我们 可以用 in  
In [94]: "a" in {"a","b"}
Out[94]: True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值