来源:python中国网 时间:2019-06-06

  集合中的元素是无序的,不重复、可哈希的(即集合中的元素都是不可变类型,因此像列表和字典等可变类型对象是不能作为集合的元素的),所以集合的成员可以做字典中的键。【集合常用作列表元素的去重】

  集合有两种不同的类型:

  1.可变集合(set):

  可变集合可以进行增加和删除元素,可变集合是不可哈希的,因此不能作为字典的键,

  2.不可变集合(frozenset):

  不能增加删除元素,可以作为字典的键。

  PS:可变集合是集合本身增加删除元素,但是增加的元素也是不可变类型。集合是可变的,集合内的元素是不可变类型并不矛盾!

  一、集合的创建以及赋值

  集合的创建只能通过集合的工厂方法set和frozenset创建。

  二、访问集合中的值

  集合不是序列类型,也就是跟字典一样都是无序的,因此不能通过下标的方式进行访问里面的元素。可以通过成员操作符in和noti n来判断某个元素是否在集合里面,或者通过for循环把集合中的元素遍历出来。

# ‐*‐ coding: utf‐8 ‐*‐

s1 = set() # 创建空的可变集合
s2 = frozenset() # 创建一个空的不可变集合

print(s1,s2)

# 使用set和frozenset方法创建集合,里面的参数必需是可迭代类型且其成员必需是可哈希的
s3 = set('helloworld') # 创建可变集合
s4 = frozenset('helloworld') # 创建不可变集合

# 判断元素是否在集合中
print('h'in s3)

# 遍历取出元素
for i in s3:
    print(i)


D:installpython3python.exe D:/pyscript/test/test1.py
set() frozenset()
True
w
r
o
l
h
d
e

Process finished with exit code 0

  三、对可变集合进行增删操作

  1.用集合内建的方法增删元素(通过dir(set)来获取内建方法)

# ‐*‐ coding: utf‐8 ‐*‐

for fun in dir(set):
    # 过滤掉双下划线方法,双下划线一般是python源码程序员用的,我们暂时不看
    if not fun.startswith('_'):
        print('内建方法:',fun)
"""
简单举例,其余方法大家尝试
"""
s1 = set('hello')
s1.add('哈哈')  # 添加元素
print(s1)
s1.remove('h')  # 移除元素
print(s1)
s1.update('world')  # 添加多个元素
print(s1)
s1.clear()  # 清空元素
print(s1)

D:installpython3python.exe D:/pyscript/test/test1.py
内建方法: add
内建方法: clear
内建方法: copy
内建方法: difference
内建方法: difference_update
内建方法: discard
内建方法: intersection
内建方法: intersection_update
内建方法: isdisjoint
内建方法: issubset
内建方法: issuperset
内建方法: pop
内建方法: remove
内建方法: symmetric_difference
内建方法: symmetric_difference_update
内建方法: union
内建方法: update
{'e', 'l', '哈哈', 'h', 'o'}
{'e', 'l', '哈哈', 'o'}
{'e', 'w', 'l', '哈哈', 'r', 'd', 'o'}
set()

Process finished with exit code 0

集合的方法
方法 适用范围
update() 不可变集合
intersection_update() 不可变集合
diffence_update() 不可变集合
symmetric_diffence_update() 不可变集合
add() 不可变集合
remove() 不可变集合
discard() 不可变集合
pop() 不可变集合
clear() 不可变集合
issubset() 所有集合
issuperset() 所有集合
union() 所有集合
intersection() 所有集合
difference() 所有集合
symmetric_diffence() 所有集合
copy() 所有集合


  2.用操作符增删元素

操作符列表
python符号 说明
in 是……的成员
no tin 不是……的成员
== 等于
!= 不等于
< 是……的真子集
<= 是……的子集
> 是……的真超集
>= 是……的超集
& 交集
| 合集(并集)
- (减号)
^ 对称差分

  PS:操作符与内建方法的比较

  很多时候两者等价。只是当用操作符时,操作符两边的操作数必须是集合。在使用内建方法时,对象也可以是迭代类型的。比如update()方法就可以接收一个字符串作为参数。