• 运维特工,战胜心魔!!
  • 有些事情其实没有那么难,只是我们感觉难,走出第一步!
  • 你所浪费的今天,是昨天死去的人奢望的明天!!!
  • 欢迎访问 unixfbi.com 运维特工社区http://unixfbi.com/
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧
  • 运维特工:http://www.unixfbi.com
  • 人生没有白走的路,每一步都算数!!
  • 空杯心态,沉淀自己!

Python-集合

Python unixfbi 10个月前 (09-07) 1704次浏览 已收录 0个评论 扫描二维码
文章目录[隐藏]

一、集合介绍

集合是一个无序不重复元素的序列。
使用set()函数来创建一个集合。或者使用{},例如:set1 = {1,2,3}

集合特点:
集合是唯一元素的无序集
与序列区别:集合不支持索引、元素获取或切片操作
与字典区别:集合不存在相关的键值
集合有两种类型:
可变集合:set
不可变集合:frozenset

二、集合常用操作

1.创建集合

方法一:

>>> a = set('abcd')     
>>> a
{'c', 'a', 'd', 'b'}

方法二:

>>> set_name = {'a','b','c'}
>>> set_name
{'c', 'a', 'b'}

2.集合添加元素

方法一:set.add()

>>> set1 = set('abc')
>>> set1
{'b', 'c', 'a'}
>>> set1.add('E')
>>> set1
{'b', 'E', 'c', 'a'}
>>> set1.add('a')
>>> set1
{'b', 'E', 'c', 'a'}

>>> set1.add('1','2','3')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: add() takes exactly one argument (3 given)

一次只能增加一个元素。

方法二:set.update()

>>> set1 = set('abc')
>>> set1.update('1','2','3')
>>> set1
{'1', '3', 'a', 'b', '2', 'c'}

3.删除元素

方法一:set.remove()
删除指定的元素,元素不存在会异常

>>> set1 = set('abc')    
>>> set1.remove('a')
>>> set1
{'b', 'c'}
>>> set1.remove('e')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'e'

方法二:set.pop()
随机删除一个元素,空集合执行会报异常

>>> set1 = set('abc')
>>> set1.pop()       
'b'
>>> set1.pop()
'c'
>>> set1.pop()
'a'
>>> set1.pop()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'pop from an empty set'

方法三:set.discard()
删除指定元素,如果元素不存在不会报异常
discard(...)
Remove an element from a set if it is a member.
If the element is not a member, do nothing.

>>> set1 = set('abc')
>>> set1.discard('a')
>>> set1.discard('b')
>>> set1.discard('c')
>>> set1.discard('c')
>>> set1
set()
>>> set1.discard('a')

方法四:set.clear()
删除集合所有的元素,删除空集合不会报异常

>>> set1 = set('abc')
>>> set1.clear()
>>> set1
set()

4.判断元素是否在集合中存在

>>> set1 = set('abc')
>>> 'a' in set1        
True
>>> 'e' in set1 
False

5.求两个集合的交集

方法一:s1.intersection(s2)

>>> s1 = set('1234')
>>> s2 = set('34')    
>>> s1.intersection(s2)
{'3', '4'}

方法二:&

>>> s1 = set('1234')
>>> s2 = set('34')    
>>> s1 & s2
{'3', '4'}

6.求两个集合交集并更新到另一个集合中

s1.intersection_update(s2)
intersection_update(...)
Update a set with the intersection of itself and another.

>>> s1 = set('1234')   
>>> s2 = set('34')     
>>> s1.intersection_update(s2)
>>> s1
{'3', '4'}

7.求两个集合的差集

方法一:s1.difference(s2)
difference(...)
Return the difference of two or more sets as a new set.
(i.e. all elements that are in this set but not the others.)

>>> s1 = set('1234')          
>>> s2 = set('34')            
>>> s1.difference(s2)
{'2', '1'}
>>> s2.difference(s1)
set()

方法二:

>>> s1 = set('1234')
>>> s2 = set('34')
>>> s1 - s2
{'1', '2'}
>>> s2 - s1
set()

8.求两个集合对称差集

symmetric_difference(...)
Return the symmetric difference of two sets as a new set.(i.e. all elements that are in exactly one of the sets.)

所有在 s1 或 s2 中,但又不同时在这两个集合中的项;

>>> s1 = set('1234')          
>>> s2 = set('34')            
>>> s1.symmetric_difference(s2);
{'1', '2'}

9.求两个集合的并集

union(...)
Return the union of sets as a new set.
(i.e. all elements that are in either set.)

>>> s1 = set('1234')            
>>> s2 = set('3456')            
>>> s1.union(s2)
{'6', '1', '5', '2', '3', '4'}

10.求两个集合是否有相同元素

isdisjoint(...)
Return True if two sets have a null intersection.

>>> s1 = set('1234')
>>> s2 = set('3456')
>>> s1.isdisjoint(s2)
False
>>> s1 = set('1234') 
>>> s2 = set('7890') 
>>> s1.isdisjoint(s2)
True

11.查看一个集合是否是另一个集合的子集

s1.issubset(s2) 如果 s1 是 s2 的子集就返回 TRUE,否则返回 False
issubset(...)
Report whether another set contains this set.

>>> s1 = set('1234') 
>>> s2 = set('7890') 
>>> s1.isdisjoint(s2)
True
>>> s1 = set('1234') 
>>> s2 = set('7890') 
>>> s1.issubset(s2)
False
>>> s1 = set('123456')
>>> s2 = set('234')    
>>> s1.issubset(s2)   
False
>>> s2.issubset(s1) 
True

UnixFBI 运维特工 , 版权所有丨如未注明 , 均为原创丨 转载请务必注明原文链接http://www.unixfbi.com/564.html
喜欢 (0)
[支付宝]
分享 (0)
unixfbi
关于作者:
运维工程师一枚,做有价值的事情!
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址