set是python基本数据类型中的一种集合类型,是一种无序、不重复元素集,用{}表示,没有哈希值。

  一、基本操作

  (一) 集合创建

  可使用python内置函数set()创建,也可以直接创建

# set 是基本数据类型中的一种基本类型
# set()函数创建集合
d = [12,43,2]
s = set(d)
print(s,type(s))  #{2, 43, 12} <class 'set'>
s = set('girl')
print(s)  # {'r', 'i', 'g', 'l'}
# 直接创建集合
s = {1,2,4,'d'}
print(s,type(s))   # {1, 2, 4, 'd'} <class 'set'>
View Code

  (二) 元素添加

  add()将传入的元素作为一个整体添加;update()将传入的元素拆分,作为个体逐个添加。

# 元素添加
# add将传入的元素作为一个整体添加
s = set('boy')
print('s = {}'.format(s))          # s = {'b', 'o', 'y'}
s.add('python')
print('s.add = {}'.format(s))      # s.add = {'b', 'o', 'y', 'python'}
# update把传入的元素拆分,作为个体加入
s = set('boy')
print('s = {}'.format(s))           # s = {'b', 'o', 'y'}
s.update('python')
print('s.update = {}'.format(s))   # s.update = {'h', 'o', 'p', 'n', 't', 'b', 'y'}
View Code

  (三) 元素删除

  clear()删除集合内全部元素,remove()删除集合内指定元素。

# 删除
# 删除集合内全部元素
s = set('boy')
s.clear()
print(s)   # set()
# 删除集合内指定元素
s = set('boy')
print(s)   # {'y', 'b', 'o'}
s.remove('b')
print(s)   # {'y', 'o'}
View Code

  二、常见应用

  (一) 逻辑运算

  set集合支持求交集(&)、并集(|)、差集(-)、对称差分(^)操作。

s1 = {1,2,3,4,5}
s2 = {'a','b',3,'c'}
# 并集
print(s1|s2)  # {1, 2, 3, 4, 5, 'c', 'a', 'b'}
# 交集
print(s1&s2)  # {3}
# 差集
print(s1-s2)  # {1, 2, 4, 5}
print(s2-s1)  # {'a', 'c', 'b'}
# 对称差分
print(s1^s2)   # {1, 2, 4, 5, 'c', 'a', 'b'}
print(s2^s1)   # {1, 2, 4, 5, 'c', 'a', 'b'}
View Code

   (二) 去除重复元素

  set()常被用来去除海量列表里的重复元素。

# 去除重复元素
s = [43,52,4,4,4,2,5,5,5,66,52,43,0,'r','d','r','d']
set_s = set(s)
# print(set_s)  # {0, 66, 2, 4, 5, 43, 'd', 52, 'r'}
# list_s =list(set_s)          # 将集合转成列表
list_s = [i for i in set_s]    # 将集合转成列表
print(list_s,type(list_s))
# [0, 66, 2, 4, 5, 43, 'd', 52, 'r'] <class 'list'>
View Code

  三、支持方法

  set()支持len(set)、i in set、for i in set。

  作为一个无序集合,set不记录元素位置和插入点,所以不支持index、slice或者其他类序列操作

s = [43,52,4,4,4,2,5,5,5,66,52,43,0,'r','d','r','d']
set_s = set(s)
print(set_s)     # {0, 66, 2, 4, 5, 'r', 43, 52, 'd'}
# 支持len()
print(len(set_s)) # 9
# 支持 i in set
if 4 in set_s:
    print('True')  # True
# 支持 for
for i in set_s:
    print(i,end='\\')  # 0\66\2\4\5\r\43\52\d\
View Code

   P.S.:

  关于frozenset,是冻结的集合,不可改变,有哈希值。使用frozenset的地方都可以用set,但frozenset由于不可改变,常被用于字典的keys,且运行效率比set高。