Python-集合(set)

集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的。

注意:
  去重,把一个列表变成集合,就自动去重了
  关系测试,测试两组数据之间的交集、差集、并集等关系

 

集合(set)是一个无序的不重复元素序列
可以使用大括号{}或者set{}函数创建集合,注意:创建一个空集合必须用set()而不是{},
因为{}是用来创建一个空字典

 

创建格式:

set1=set({1,2,"barry"})
set2={1,2,"barry"}
print(set1)     # {'barry', 1, 2}
print(set2)     # {'barry', 1, 2}

 

方法:

set1 = {'wusir', 'ritian', 'egon', 'alex', 'barry'}
set2 = {'ritian', 'egon', 'alex', "Lisa"}

set1.add('Lisa')                    # 给集合添加元素,如果元素在集合中,则不进行任何操作
set1.clear()            # 移除集合中所有的元素
set2 = set1.copy()            # 拷贝一个集合

set2.difference(set1)           # 返回集合的差集,即返回的集合元素包含在第一个集合中,但不包含在第二个集合(方法的参数)中
set1.difference_update(set2)           # 用于移除两个集合中都存在的元素
set1.discard("alex")            # 用于移除指定的集合元素

re = set1.intersection(set2)           # 返回两个或更多集合中都包含的元素,即交集
set1.intersection_update(set2)          # 获取两个或更多集合中都重叠的元素,即计算交集

re = set1.isdisjoint(set2)                  # 判断两个集合内是否包含相同元素,没有返回True,有的返回False
re = set1.issubset(set2)                # 判断'set1'的所有元素是否都包含在集合'set2'内
re = set1.issuperset(set2)              # 判断指定集合的所有元素是否都包含在原始的集合中,如果是则返回 True,否则返回 False

set1.pop()                      # 随机删除集合里的某一个元素
set1.remove('alex')                  # 删除集合内指定的元素

re = set1.symmetric_difference(set2)        # 返回两个集合中不重复的元素集合,即会移除两个集合中都存在的元素
set1.symmetric_difference(set2)    # 在原始集合 set1 中移除与 set2 集合中的重复元素,并将不重复的元素插入到集合 set1 中

re = set1.union(set2)               # 合并两个集合,重复元素只会出现一次
set1.update(set2)                  # 合并两个集合,重复元素只会出现一次

 

增:

# (1). 直接添加
set1 = {'alex','wusir','ritian','egon'}
set1.add('barry')
print(set1)     # {'egon', 'ritian', 'alex', 'barry', 'wusir'}

# (2). uppdate : 迭代着增加
set1 = {'alex','wusir','ritian','egon'}
set1.update('A')
set1.update('老师')
set1.update([1,2,3])
print(set1)     # {1, 2, 3, 'egon', 'wusir', 'A', '老', 'ritian', 'alex', '师'}

 

删:

# (1). 使用 remove() 方法删除一个元素
set1 = {'wusir', 'ritian', 'egon', 'alex', 'barry'}
set1.remove('wusir')    # 删除一个元素
print(set1)     # {'barry', 'ritian', 'alex', 'egon'}

# (2). 使用 pop() 方法随机删除一个元素
set2 = {'wusir', 'ritian', 'egon', 'alex', 'barry'}
set2.pop()
print(set2)

# (3). 使用 clear() 方法清空集合
set3 = {'wusir', 'ritian', 'egon', 'alex', 'barry'}
se3.clear()
print(set3)     # TypeError: descriptor 'clear' of 'set' object needs an argument(无值)

# (4). 使用 del 函数删除集合
set4 = {'wusir', 'ritian', 'egon', 'alex', 'barry'}
del set4
print(set4)     # NameError: name 'set4' is not defined(没有该集合)

 

 

集合的交集:

(1). 交集 : 返回两个集合都存在的值(&  或者 intersection)

se1 = {1,2,3,4,5,6,7,8,9}
se2 = {1,2,3,4}
print(se1 & se2)
print(se1.intersection(se2))    # {1, 2, 3, 4}

(2). 并集 : 合并两个集合,重复元素只会出现一次(| 或者 union)

se1 = {1,2,3,4,5,6,7,8,9}
se2 = {1,2,3,4}
print(se1 | se2)
print(se1.union(se2))   # {1, 2, 3, 4, 5, 6, 7, 8, 9}

(3). 差集 : 返回一个集合,元素包含在集合 se1 ,但不在集合 se2(- 或者 difference)

se1 = {1,2,3,4,5,6,7,8,9}
se2 = {1,2,3,4}
print(se1 - se2)
print(se1.difference(se2))      # {5, 6, 7, 8, 9}

(4). 反交集 : 返回两个集合组成的新集合,但会移除两个集合的重复元素(^ 或者 symmetric_difference)

se1 = {1,2,3,4,5,6,7,8,9}
se2 = {1,2,3,4}
print(se1 ^ se2)
print(se1.symmetric_difference(se2))    # {5, 6, 7, 8, 9}

(5). 子集或者超集 : 判断集合 se2 的所有元素是否都包含在集合 se1 中(> < 或者 issuperset)

se1 = {1,2,3,4,5,6,7,8,9}
se2 = {1,2,3,4}
print(se1 < se2)                # False
print(se1.issuperset(se2))      # True

(6). frozenset不可变集合,让集合变成不可变类型。

se1 = {1,2,3,4,5,6,7,88,99}
se2 = frozenset(se1)
print(se2)              # frozenset({1, 2, 3, 4, 5, 6, 7, 99, 88})
print(type(se2))        # <class 'frozenset'>

 

posted @ 2020-07-15 20:34  马ある某  阅读(147)  评论(0编辑  收藏  举报