Python:集合(set)
一:作用
二:定义
三:类型转换
四:内置方法
一:作用
集合的作用就是两个或多个集合整体进行比较差异,而不是用来从集合中取单个元素,取单个元素用列表,元组或字典
1.关系运算:
friends1 = ['张三','李四','王五','李老八'] friends2 = ['赵老七','山本五十六','李老八','张三'] lll = [] for i in friends1: if i in friends2: lll.append(i) print(lll)
以上代码执行结果为:
['张三', '李老八']
由执行结果可知,通过for循环将两个列表的相同值取出,那么有没有更简便的方法呢?答案就是用集合
二:集合类型的定义
在{}中用逗号分割开多个元素,且元素必须满足以下三个要求:
1.元素必须是不可变类型
2.元素必须是无序的
3.元素没有重复
lll = {(1,2,3),2,'hello'}
三:集合类型转换
lll = set() mmm = [1,2,3,4,5,6,6] for i in mmm: lll.add(i) print(type(lll)) print(lll)
以上代码执行结果为:
<class 'set'> {1, 2, 3, 4, 5, 6}
四:集合的内置方法
friends1 = {'张三','李四','王五','李老八'} friends2 = {'赵老七','山本五十六','李老八','张三'} print(friends1 & friends2,'求两个集合的交集') print(friends1 | friends2,'求两个集合的并集') print(friends1 - friends2,'求friends1的差集') print(friends2 - friends1,'求friends2的差集') print(friends1 ^ friends2,'求两个集合的对称差集')
以上代码执行结果为:
{'李老八', '张三'} 求两个集合的交集 {'李老八', '山本五十六', '赵老七', '王五', '张三', '李四'} 求两个集合的并集 {'李四', '王五'} 求friends1的差集 {'山本五十六', '赵老七'} 求friends2的差集 {'王五', '山本五十六', '李四', '赵老七'} 求两个集合的对称差集
关系运算:
lll = {1,2,3,4} mmm = {1,2,3,4} print(lll > mmm) print(lll < mmm) print(lll == mmm)
以上代码执行结果为:
False
False
True
由执行结果可知,lll和mmm互为父子关系
集合的其它方法:
删除:
friends1 = {'张三','李四','王五','李老八'} friends1.discard('山本五十六') print(friends1,'-------------分割线') friends1.remove('山本五十六') print(friends1)
以上代码执行结果为:
{'张三', '王五', '李四', '李老八'} -------------分割线 Traceback (most recent call last): File "D:\PyCharm\lizi\basis\20200303\集合.py", line 31, in <module> friends1.remove('山本五十六') KeyError: '山本五十六'
由执行结果可知,删除已有元素的时候discard与remove相同,删除不同元素的时候remove会导致程序报错
修改:
friends1 = {'张三','李四','王五','李老八'} friends1.update({1,2,3,4}) print(friends1)
以上代码执行结果为:
{1, '李老八', 2, '李四', 3, 4, '张三', '王五'}
添加:
friends1 = {'张三','李四','王五','李老八'} friends1.update({1,2,3,4}) friends1.add(999) print(friends1)
以上代码执行结果为:
{'张三', 1, '李四', 2, 3, 4, 999, '王五', '李老八'}
需要注意的是,update可以添加多个元素,而add每次只能添加一个,多了报错