【python】集合操作set函数去重与集合、数组、元组中交集(intersection)、并集(union)、差集(difference)、对称差集(sysmmetric difference)

python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素。 集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算。

sets 支持 x in set的bool运算判别x是否在集合内, len(set)集合的长度,和 for x in set对集合内数据的操作。作为一个无序的集合,sets不记录元素位置或者插入点。因此,sets**不支持 indexing, slicing**, 或其它类序列(sequence-like)的操作

集合用于包含一组无序的对象。要创建集合,可使用set()函数并像下面这样提供一系列的项:

In [1]: s = set([3,5,9,10])      #创建一个数值集合

In [2]: t = set("Hello")         #创建一个唯一字符的集合

与列表和元组不同,集合是无序的,也无法通过数字进行索引。此外,集合中的元素不能重复。例如,如果检查前面代码中t集合的值,结果会是:

In [3]: t
Out[3]: {'H', 'e', 'l', 'o'}

集合支持一系列标准操作,包括并集、交集、差集和对称差集,例如:

  • a = t | s # t 和 s的并集
  • b = t & s # t 和 s的交集
  • c = t – s # 求差集(项在t中,但不在s中)
  • d = t ^ s #对称差集(项在t或s中,但不会同时出现在二者中)

基本操作:

1、添加新的元素,.add()用于添加单个元素、.update()用于批量添加元素,如果喂给add的是‘avda’这种多字符串可以成为一个元素,但是喂给update会对字符串去重操作

In [4]: t.add('x')
In [5]: t
Out[5]: {'H', 'e', 'l', 'o', 'x'}

In [6]: t.update('aa','bbb')
In [7]: t
Out[7]: {'H', 'a', 'b', 'e', 'l', 'o', 'x'}

In [9]: t.add('ccc')
In [10]: t
Out[10]: {'H', 'a', 'b', 'ccc', 'e', 'l', 'o', 'x'}

2、使用remove()可以删除一项,只能一个一个删掉

In [12]: t.remove('H')
In [13]: t
Out[13]: {'a', 'b', 'ccc', 'e', 'l', 'o', 'x'}

3、集合长度

In [15]: len(t)
Out[15]: 7

4、bool判断

#x in s  测试 x 是否是 s 的成员  
In [16]: 'a' in t
Out[16]: True

#x not in s 测试 x 是否不是 s 的成员  
In [17]: 'k' not in t
Out[17]: True

#s.issubset(t),s <= t 测试是否s中的每一个元素都在t中  
In [18]: s.issubset(t)
Out[18]: False 
#s.issuperset(t),s >= t测试是否t中的每一个元素都在s中
In [19]: s.issuperset(t)
Out[19]: False 

5、交集(&)、(intersection)项同时在t与s中

In [20]: s&t
Out[20]: set()
In [22]: s.intersection(t)
Out[22]: set()

6、并集(|)、(union),项在t中或者在s中

In [23]: s|t
Out[23]: {'a', 3, 5, 'ccc', 'e', 9, 10, 'l', 'o', 'x', 'b'}

In [21]: s.union(t)
Out[21]: {'a', 3, 5, 'ccc', 'e', 9, 10, 'l', 'o', 'x', 'b'}

7、差集(-)、(difference),项在s中,但不在t中

In [24]: s-t
Out[24]: {3, 5, 9, 10}

In [25]: s.difference(t)
Out[25]: {3, 5, 9, 10}

8、对称差集(^)、(sysmmetric_difference),项在t或s中,但不会同时出现在二者中

In [26]: s^t
Out[26]: {'a', 3, 5, 9, 10, 'o', 'x', 'ccc', 'e', 'l', 'b'}

In [27]: s.symmetric_difference(t)
Out[27]: {'a', 3, 5, 9, 10, 'o', 'x', 'ccc', 'e', 'l', 'b'}

请注意:union(), intersection(), difference() 和 symmetric_difference() 的非运算符(non-operator,就是形如 s.union()这样的)版本将会接受任何 iterable 作为参数。相反,它们的运算符版本(operator based counterparts)要求参数必须是 sets,如果都是set会报错

In [29]: set('abc') & 'cbs'
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-29-2548e5075caf> in <module>()
----> 1 set('abc') & 'cbs'

TypeError: unsupported operand type(s) for &: 'set' and 'str'

#如果是非运算符,则可以;
In [28]: set('abc').intersection('cbs')
Out[28]: {'b', 'c'}
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值