set()
s = set("aabbcc")
s = {2,3,4,5,6}
set()
创建一个空的集合(不能用{}
来创建)set(iterable)
用可迭代对象创建一个新的集合示例:
s = set() # s = { }
s = {2,3,4,5,6} # s = {2,3,4,5,6}
s = set("abc") # s = {'a', 'b', 'c'}
s = set("aabbcc") # s = {'a', 'b', 'c'} --->集合内不能重复
s = set( { 1:'1', 2:'2', 3:'3' }) # s = {1,2,5}
s = set( ("abc", "123", True ) ) # s = { "abc", "123", True }
s = set( { 1:2 }, { 1:'1'} ) # 错误,集合内都是不可变对象
s = set( [1,2,3], ['a', 'a', 'c'] ) # 错误,集合内都是不可变对象
符号 | 含义 | 示例说明:s1 = {1,2,3} ; s2 = {2,3,4} |
---|---|---|
& | 交集 | s1 & s2 = { 2 , 3 } |
\| | 并集 | s1 \| s2 = { 1, 2, 3, 4 } |
- | 补集 | s1 - s2 = { 1 } |
^ | 对称补集 | s1 - s2 = { 1, 4 } |
< | 子集 | 判断一个集合是另一个集合的子集(小学知识略 ) |
> | 超集 | 判断一个集合是另一个集合的超集(小学知识略 ) |
== | 相同 | 判断两个集合是否相同小学知识略 |
!= | 不等于 | 小学知识略 |
>=,<= | 大小于等于 | 小学知识略 |
和字典、列表使用in
运算的方法一致
函数 | 说明 |
---|---|
len(x) | 返回集合的长度 |
max(x) | 返回集合中最大的数 |
min(x) | 返回集合中最小的数 |
sum(x) | 返回集合中所有元素的和 |
any(x) | 真值测试,判断集合中是否有真值 |
all(x) | 真值测试,集合中所有元素为真,返回真 |
方法 | 说明 |
---|---|
S.add(e) | 在集合中添加一个新的元素e ;如果元素已经存在,则不添加 |
S.remove(e) | 从集合中删除一个元素,如果元素不存在于集合中,则会产生一个KeyError 错误 |
S.discard(e) | 从集合S 中移除一个元素e |
S.clear() | 清空集合内的所有元素 |
S.copy() | 将集合进行一次浅拷贝 |
S.pop() | 从集合S 中删除一个随机元素;如果此集合为空,则引发KeyError 异常 |
S.update(s2) | 用 S 与s2 得到的全集更新变量S |
经理有:曹操、刘备、孙权
技术人员:曹操、孙权、张飞、关羽
用集合求出:
1. 即是经理又是技术人员的有谁?
2. 是经理,但不是技术人员的有谁?
3. 是技术人员,但不是经理的有谁?
4. 张飞是经理吗?
5. 身兼一职的人有谁?
6. 经理和技术人员一共有几个人?
jingli = set(("曹操","刘备","孙权"))
jishu = set(("张飞","刘备","孙权","关羽"))
print("即是经理又是技术人员的有:",','.join(jingli&jishu)) # 即是经理又是技术人员的有: 孙权,刘备
print("是经理,但不是技术人员的有:",','.join(jingli-jishu)) # 是经理,但不是技术人员的有: 曹操
print("是技术人员,但不是经理的有:",','.join(jishu-jingli)) # 是技术人员,但不是经理的有: 关羽,张飞
print("张飞 %s 经理"%( "是" if "张飞" in jingli else "不是")) # 张飞 不是 经理
print("身兼一职的人有:",','.join(jingli^jishu)) # 身兼一职的人有: 张飞,关羽
print("经理和技术人员一共有%d个"%len(jingli|jishu)) # 经理和技术人员一共有5个
{ x for x in set_list [ if 表达式 ]}
固定集合是不可变的,无序的,含有唯一的元素的集合
frozenset( ( 1, 2, 3, 4) )
frozenset( [ frozenset(( 1, 2, 3, 4)), 5, 6 ] )
可以嵌套集合的全部方法
去掉修改集合的方法