Python数据类型:集合

数据类型:集合

集合(set)是Python2.4引入的一种新类型。集合常量与字典类似,用花括号表示,如{1,2,3}。几何中的元素是唯一的、无序的和不可改变的。集合支持数学理论中的各种集合运算。

集合常量

集合常量用为字典对象的花括号表示,也可用内置的set函数来创建。例如:


>>> x={1,2,3}       #直接使用集合常量
>>> x
{1, 2, 3}
>>> type(x)
<class 'set'>
>>> set({1,2,3})    #使用集合常量做常量创建对象对象
{1, 2, 3}
>>> set([1,2,3])    #使用列表常量做参数创建集合对象
{1, 2, 3}
>>> set('123abc')   #使用字符串常量做参数创建集合常量
{'b', 'a', '2', '3', '1', 'c'}
>>> set()           #创建空集合
set()
>>> type({})        #{}表示空字典对象,而非空集合
<class 'dict'>
>>> {1,1,2,3}       #创建集合对象时会自动删除重复值
{1, 2, 3}
>>> set({1,2,2,3,3})
{1, 2, 3}
>>>

Python3.0还引入了一种集合解析构造方法。例如


>>> {x for x in [1,2,3,4]}
{1, 2, 3, 4}
>>> {x for x in 'abcddd'}
{'a', 'b', 'c', 'd'}
>>>

上面分别使用了列表和字符串的解析方式来创建集合。还可以进一步用解析对象的表达式来创建集合元素。例如:


>>> {x**2 for x in [1,2,3,4]}   #解析列表的元素用来创建集合
{16, 1, 4, 9}
>>> {x*2 for x in 'abcd'}       #解析字符串的元素用来创建集合
{'dd', 'bb', 'aa', 'cc'}

集合运算

集合对象支持下列运算

>>> x={1,2,'a', 'bc'}
>>> y={1,'a',5}
>>> len(x)              #求集合中元素的个数
4
>>> 'a' in x            #判断元素是否属于集合
True
>>> x-y                 #求差集
{2, 'bc'}
>>> x | y               #求并集
{1, 2, 5, 'a', 'bc'}
>>> x & y               #求交集
{1, 'a'}
>>> x^y                 #求对称差,即:(x|y)-(x&y)
{2, 5, 'bc'}
>>> x<y                 #判断x是否是y的子集
False
>>> x>{1,2}             #判断x是否是{x,y}的超集
True

集合基本操作

集合中的元素是不能进行修改的,但可以为集合添加或删除元素。例如:

>>> x={1,2}
>>> x
{1, 2}
>>> y=x.copy()          #复制集合对象
>>> y
{1, 2}
>>> x.add('abc')        #为集合添加一个元素,参数为元素
>>> x,y                 #上述复制为对象的复制,而非引用的复制
({1, 2, 'abc'}, {1, 2})
>>> x.update({10,20})   #为集合添加多个元素,参数为集合,若为列表或字符串,会被解析成多个元素
>>> x
{1, 2, 10, 'abc', 20}
>>> x.remove(10)        #从集合中删除指定元素,元素不存在则报KeyError异常
>>> x
{1, 2, 'abc', 20}
>>> x.discard(20)       #从结合中删除指定元素,元素不存在不报异常
>>> x
{1, 2, 'abc'}
>>> x.pop()             #从集合中随机删除一个元素,并返回该元素
1
>>> x
{2, 'abc'}
>>> x.clear()           #删除集合中的全部元素
>>> x
set()
>>>

集合也可用for循环执行迭代操作。例如:


>>> x={1,2,3}
>>> for a in x:print(a) #用循环迭代集合中的元素
...
1
2
3
>>>

几何元素是不可改变的,因此不能将可变对象放入集合中。集合、列表和字典对象均不能加入集合。元组可以作为一个元素加入几何。例如:


>>> x={1,2}
>>> x
{1, 2}
>>> x.({1})                 #集合不能放入集合
  File "<stdin>", line 1
    x.({1})
      ^
SyntaxError: invalid syntax
>>> x.add([1,2,3])          #列表不能放入集合
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> x.add({'Mon':1})        #字典对象不能放入集合
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'dict'
>>> x.add((1,2,3))          #元组可以放入集合
>>> x
{1, 2, (1, 2, 3)}
>>>

冻结集合

在前面的内容中,已用到的集合可以添加或删除集合元素。Python提供了一种特殊的集合--冻结集合(frozenset)。冻结集合是一个不可改变的集合,可以作为其他集合的元素。

例如:


>>> x=frozenset([1,2,3])            #创建冻结集合
>>> x
frozenset({1, 2, 3})                #冻结集合的打印格式与普通集合不同
>>> y=set([4,5])
>>> y
{4, 5}
>>> y.add(x)                        #将冻结集合作为元素加入另一个集合
>>> y
{frozenset({1, 2, 3}), 4, 5}
>>> x.add(10)                       #试图为冻结集合添加元素发生错误
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'frozenset' object has no attribute 'add'
>>>

from: Python3基础教程

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值