python数据结构之集合set

本文介绍了Python的集合数据类型set,它用于创建无序且不重复元素集。set支持的关系测试、消除重复元素、交集、差集、并集等操作。详细讲解了创建、添加、删除元素的方法,以及子集、并集、差集和对称差集等概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python集合数据类型,用set()创建一个无序不重复元素集,是一个无序且不重复元素集,相当于没有value只有key的字典,基本功能包括关系测试和消除重复元素,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。
1、创建空集合:

>>> st = set()
>>> st
set()
>>> type(st)
<class 'set'>
>>>

2、创建非空集合:用set(iterable)或{}来创建。

>>> 
>>> st1 = {'h','e','l','l','o',' ','w','o','r','l','d'}
>>> print(type(st1), st1)
<class 'set'> {'h', 'l', 'r', 'e', 'o', ' ', 'w', 'd'}
>>> st4 = set(['h','e','l','l','o',' ','w','o','r','l','d'])
>>> print(type(st4), st4)
<class 'set'> {'h', 'l', 'r', 'e', 'o', ' ', 'w', 'd'}
>>> st5 = set(('h','e','l','l','o',' ','w','o','r','l','d'))
>>> print(type(st5), st5)
<class 'set'> {'h', 'l', 'r', 'e', 'o', ' ', 'w', 'd'}
>>> 
>>> st6 = set({'a':1,'b':2,'c':3})
>>> print(type(st6), st6)
<class 'set'> {'c', 'a', 'b'}
>>>

3、add()增加一个元素。不会产生新集合。

>>> st1
{'h', 'l', 'r', 'e', 'o', ' ', 'w', 'd'}
>>> st1.add('A')
>>> st1
{'h', 'l', 'r', 'e', 'A', 'o', ' ', 'w', 'd'}
>>> 

4、update(iterable)增加多个元素。iterable为任意序列。

>>> st
{1, 2, 3, 4, 5}
>>> st1 = set((6,7,8,9,10))
>>> st1
{6, 7, 8, 9, 10}
>>> st.update(st1)
>>> st
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
>>> 
>>> st = set((1,2,3,4,5))
>>> st
{1, 2, 3, 4, 5}
>>> st.update([5,6,7,8,9,10])
>>> st
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
>>> 

5、remove()删除一个元素。如果不存在该元素则报异常。

>>> st
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
>>> st.remove(1)
>>> st
{2, 3, 4, 5, 6, 7, 8, 9, 10}
>>> st
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
>>> st.remove(11)
Traceback (most recent call last):
  File "<pyshell#71>", line 1, in <module>
    st.remove(11)
KeyError: 11
>>> 

6、discard(...) 如果存在该元素则删除,如果不存在则不理。
 |      Remove an element from a set if it is a member.
 |      
 |      If the element is not a member, do nothing.

>>> st
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
>>> st.discard(10)
>>> st
{1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> st.discard(11)
>>> st
{1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> 

7、clear()清空元素。

>>> st
{2, 3, 4, 5, 6, 7, 8, 9, 10}
>>> st.clear()
>>> st
set()
>>> type(st)
<class 'set'>
>>> 

8、len()计算元素个数。

>>> st
{1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> 
>>> len(st)
9
>>> 

9、pop(...)随机取一个元素,如果集合为空集合,则报异常。
 |      Remove and return an arbitrary set element.
 |      Raises KeyError if the set is empty.

>>> st
{1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> st.pop()
1
>>> st
{2, 3, 4, 5, 6, 7, 8, 9}
>>> 
>>> stt = set()
>>> stt.pop()
Traceback (most recent call last):
  File "<pyshell#89>", line 1, in <module>
    stt.pop()
KeyError: 'pop from an empty set'
>>> 

10、copy(...)
 |      Return a shallow copy of a set.

>>> st
{2, 3, 4, 5, 6, 7, 8, 9}
>>> sstt = st.copy()
>>> sstt
{2, 3, 4, 5, 6, 7, 8, 9}
>>> id(st)
45938504
>>> id(sstt)
45940296
>>> sstt.add(1)
>>> sstt
{1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> st
{2, 3, 4, 5, 6, 7, 8, 9}
>>> st.discard(9)
>>> st
{2, 3, 4, 5, 6, 7, 8}
>>> sstt
{1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> 

11、set与数学中的集合类似,是无序的和无重复元素的集合。因此,在Python中,set可以进行交集、并集、补集等操作。

Python set集合操作
数学符号Python符号含义
- 或\-差集,相对补集
&交集
|并集
!=不等于
==等于
in是成员关系
not in非成员关系
>>> st
{2, 3, 4, 5, 6, 7, 8}
>>> st1 = set([1,2,3,4,5])
>>> st1
{1, 2, 3, 4, 5}
>>> a = st & st1
>>> a
{2, 3, 4, 5}
>>> 
>>> b = st | st1
>>> b
{1, 2, 3, 4, 5, 6, 7, 8}
>>> 
>>> c = st - st1
>>> c
{8, 6, 7}
>>> 
>>> st == st1
False
>>> 

12、issubset()判断一个集合是否是另一个集合的子集。

>>> lst1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> lst2 = [1, 3, 5, 7, 9]
>>> set(lst1).issubset(set(lst2))
False
>>> set(lst2).issubset(set(lst1))
True
>>> 

13、issuperset()与issubset()相反。

>>> 
>>> set1 = set(lst1)
>>> set2 = set(lst2)
>>> set1.issuperset(set2)
True
>>> set2.issuperset(set1)
False
>>> 

14、set1.intersection(set2)返回set1和set2中相同部分,等价的运算符为&。

>>> 
>>> set2.add(99)
>>> set2
{1, 3, 99, 5, 7, 9}
>>> set1.intersection(set2)
{1, 3, 5, 7, 9}
>>> 

15、set1.union(set2)返回一个新集合,新集合包含set1,set2的所有元素,等价的运算符为|。

>>> 
>>> set1.union(set2)
{1, 2, 3, 4, 5, 6, 7, 8, 9, 99}
>>> 

16、set1.difference(set2)返回的集合为set1中去除含有的set2中的元素,等价的运算符为-。

>>> 
>>> set1.difference(set2)
{8, 2, 4, 6}
>>> set2.difference(set1)
{99}
>>> 

17、set1.symmetric_difference(set2),返回两个集合中不重复的元素集合,即会移除两个集合中都存在的元素。

>>> 
>>> set1.symmetric_difference(set2)
{2, 99, 4, 6, 8}
>>> set2.symmetric_difference(set1)
{2, 99, 4, 6, 8}
>>> 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值