集合(set)

集合(set)是基本数据类型的一种集合类型,它有可变集合(set())和不可变集合(frozenset())两种。

集合的特点:

  1. 由不同元素组成
  2. 无序
  3. 集合中元素必须是不可变类型(number,string,tuple)

创建可变集合

s = {2, 3, 1, 4, 3}

print(s)    # {1, 2, 3, 4}

# 通过set()创建
s = set('hello')
print(s)    # {'e', 'o', 'l', 'h'}

s = set(['xiao', 'xiao', 'ming'])
print(s)    # {'xiao', 'ming'}

集合内置方法

add()  # 添加

s = {1, 2, 3}

s.add('xm')
print(s)    # {1, 2, 3, 'xm'}

s.add(3)
print(s)    # {1, 2, 3, 'xm'}

clear()  # 清空

s = {1, 3, 2}

s.clear()
print(s)    # set()

 pop()  # 删除

s = {1, 2, 3, 'xm'}

s.pop()
print(s)    # {2, 3, 'xm'}

remove()  # 指定删除,删除不存在的元素会报错

s = {1, 2, 3, 'xm'}

s.remove('xm')
print(s)    # {1, 2, 3}

s.remove('xxm')    # 报错

discard()  # 指定删除,删除不存在的元素不会报错

s = {1, 2, 3, 'xm'}

s.discard('xm')
print(s)    # {1, 2, 3}

s.discard('xxm')    # 不会报错,继续执行下面的代码
print(s)    # {1, 2, 3}

copy()  # 拷贝(复制)

s = {1, 2, 3, 'xm'}

new_s = s.copy()
print(new_s)    # {1, 2, 3, 'xm'}

update()  # 更新

s1 = {1, 2, 3, 'xm'}

s1.update('enen')    # 字符串
print(s1)    # {1, 2, 3, 'xm', 'n', 'e'}

s1.update({3, 4, 'enen'})    # 集合
print(s1)    # {1, 2, 3, 4, 'e', 'enen', 'n', 'xm'}

s1.update(('abc', 'qwe'))    # 元组
print(s1)    # {1, 2, 3, 4, 'abc', 'e', 'enen', 'qwe', 'n', 'xm'}

s1.update(['list1', 'list2'])    # 列表
print(s1)    # {1, 2, 3, 4, 'abc', 'list1', 'list2', 'e', 'enen', 'qwe', 'n', 'xm'}

集合交、差、并集

intersection()  # 交集(&)

# 语法
# set1.intersection(set2)

py_list = {'ergou', 'xiaoming', 'goudan'}
php_list = {'xiaoming', 'xiaohong','xiaosan'}

print(py_list.intersection(php_list))    # {'xiaoming'}

print(py_list & php_list)    # {'xiaoming'}

union()  # 并集(|)

# 语法
# set1.union(set2)

py_list = {'ergou', 'xiaoming', 'goudan'}
php_list = {'xiaoming', 'xiaohong','xiaosan'}

print(py_list.union(php_list))    # {'ergou', 'xiaoming', 'goudan', 'xiaohong', 'xiaosan'}

print(py_list | php_list)    # {'ergou', 'xiaoming', 'goudan', 'xiaohong', 'xiaosan'}

difference()  # 差集(-)

# 语法
# set1.difference(set2)

py_list = {'ergou', 'xiaoming', 'goudan'}
php_list = {'xiaoming', 'xiaohong','xiaosan'}

print(py_list.difference(php_list))    # {'ergou', 'goudan'}
print(php_list.difference(py_list))    # {'xiaohong', 'xiaosan'}

print(py_list - php_list)    # {'ergou', 'goudan'}
print(php_list - py_list)    # {'xiaohong', 'xiaosan'}

symmetric_difference()  # 交叉补集(^)

# 语法
# set1.symmetric_difference(set2)

py_list = {'ergou', 'xiaoming', 'goudan'}
php_list = {'xiaoming', 'xiaohong','xiaosan'}

print(py_list.symmetric_difference(php_list))    # {'ergou', 'goudan', 'xiaohong', 'xiaosan'}

print(py_list ^ php_list)    # {'ergou', 'goudan', 'xiaohong', 'xiaosan'}

difference_update()  # 

# 相当于
# set1 = set1 - set2

py_list = {'ergou', 'xiaoming', 'goudan'}
php_list = {'xiaoming', 'xiaohong','xiaosan'}

print(py_list.difference_update(php_list))    # {'ergou', 'goudan'}

print(php_list.difference_update(py_list))    # {'xiaohong', 'xiaosan'}

intersection_update()  # 

# 相当于
# set1 = set1 & set2

py_list = {'ergou', 'xiaoming', 'goudan'}
php_list = {'xiaoming', 'xiaohong','xiaosan'}

py_list.intersection(php_list)
print(py_list)    # {'xiaoming'}

indisjoint()  # 判断两集合交集是否为空(没有交集返回->True,有交集返回->False)

# 格式
# set1.isdisjoint(set2)

s1 = {1, 2, 3}
s2 = {4, 5, 6}

var = s1.isdisjoint(s2)
print(var)    # True

s2 = {3, 4, 5}
var = s1.isdisjoint(s2)
print(var)    # False

issubset()  # 判断一个集合是否是另一个集合的子集

# set1.issubset(s2)

s1 = {1, 2, 3}
s2 = {1, 2, 3, 4, 5, 6}

print(s1.issubset(s2))    # True

print(s2.issubset(s1))    # False

issuperset()  # 判断一个集合是否是另一个集合的父集

# set1.issuperset(s2)

s1 = {1, 2, 3}
s2 = {1, 2, 3, 4, 5, 6}

print(s1.issubset(s2))    # False

print(s2.issubset(s1))    # True

symmetric_difference_update()  # 

# 相当于
# set1 = set1.symmetric_difference(set2)

s1 = {1, 2, 3}
s2 = {3, 4, 5}
s1.symmetric_difference_update(s2)
print(s1)    # {1, 2, 4, 5}

 创建不可变集合

s = frozenset('xiaoming')
print(s)    # frozenset({'m', 'g', 'o', 'a', 'i', 'x', 'n'})
原文地址:https://www.cnblogs.com/yanxiaoming/p/9163717.html