Python基础——集合(set)

集合是一个无序不重复元素的序列,不能被切片、索引

1.1 添加add/update()

a_set = {1,2,3,4}
# 添加
a_set.add(5)
a_set.update(4,5,[6,7])
print(a_set)  # 输出{1, 2, 3, 4, 5,[6,7]}

1.2 删除discard/remove()

#使用remove时,如果元素不存在,则会发生错误。

# 删除
a_set.discard(5)
a_set.remove(5)
print(a_set)  # 输出{1, 2, 3, 4}

1.3 集合快速运算

s = {1,2,3,4,5}
s2 = {3,4,5,6,7}
# & 交集运算——两者中都包含的元素
result = s & s2 # {3, 4, 5}

# | 并集运算——代表两者中全部元素聚在一起去重后的结果
result = s | s2 # {1,2,3,4,5,6,7}

# - 差集——代表前者中包含、后者中不包含的元素
result = s - s2 # {1, 2}

# ^ 异或集——不同时包含于两个集合中的元素
result = s ^ s2 # {1, 2, 6, 7}

# <= 检查一个集合是否是另一个集合的子集
a = {1,2,3}
b = {1,2,3,4,5}

result = a <= b # True
result = {1,2,3} <= {1,2,3} # True
result = {1,2,3,4,5} <= {1,2,3} # False

# < 检查一个集合是否是另一个集合的真子集
result = {1,2,3} < {1,2,3} # False
result = {1,2,3} < {1,2,3,4,5} # True

# >= 检查一个集合是否是另一个的超集
# > 检查一个集合是否是另一个的真超集

1.3集合的内置方法

1.3.1 交集——intersection(set1, set2 … etc)

  • 用于返回两个或更多集合的交集,返回一个新的集合。
# 返回两个或者多个集合的交集
x = {"apple", "banana", "cherry"}
y = {"google", "runoob", "apple"}
z = x.intersection(y)
print(z)

# 返回三个集合的交集
x = {"a", "b", "c"}
y = {"c", "d", "e"}
z = {"f", "g", "c"}
result = x.intersection(y, z)
print('三个集合的差集是:%s' % result)

# 输出结果:
{'apple'}
两个集合的差集是:{'c'}

1.3.2 并集——union()

# 合并两个集合,重复元素只会出现一次:
x = {"apple", "banana", "cherry"}
y = {"google", "runoob", "apple"}
z = x.union(y) 
print(z)

#输出结果为:
{'cherry', 'runoob', 'google', 'banana', 'apple'}

# 合并多个集合:
x = {"a", "b", "c"}
y = {"f", "d", "a"}
z = {"c", "d", "e"}
result = x.union(y, z) 
print(result)
 
#输出结果为:
{'c', 'd', 'f', 'e', 'b', 'a'}

1.3.3 差集——difference()

返回的集合元素包含在第一个集合中,但不包含在第二个集合(方法的参数)中,返回一个新的集合。

实例:

# 求两个集合的差集,元素在 x 中不在 y 中
x = {"apple", "banana", "cherry"}
y = {"google", "microsoft", "apple"}

z = x.difference(y)
print('两个集合的差集是:%s' % z)

# 输出结果为:
{'cherry', 'banana'}

1.3.4 异或集——symmetric_difference()

  • 返回两个集合中不重复的元素集合,结果返回一个新的集合。
# 返回两个集合组成的新集合,但会移除两个集合的重复元素:
x = {"apple", "banana", "cherry"}
y = {"google", "runoob", "apple"}

z = x.symmetric_difference(y)

print(z)

输出结果:
{'banana', 'google', 'cherry', 'runoob'}

1.3.5 判断子集——issubset()

  • 如果是则返回 True,否则返回 False。
# 判断集合 x 的所有元素是否都包含在集合 y 中:
x = {"a", "b", "c"}
y = {"f", "e", "d", "c", "b", "a"}
z = x.issubset(y) 
print(z)

#输出结果
True# 说明 集合 x 中的元素都包含在 y 中

# 集合 y 中只有元素 b 和 c ,执行结果为False 
x = {"a", "b", "c"}
y = {"f", "e", "d", "c", "b","y"}
z = x.issubset(y)
print(z)

#结果输出;
False

1.3.6 判断超集——issuperset()

  • 判断指定集合的所有元素是否都包含在原始的集合中,如果是则返回 True,否则返回 False。
# 判断集合 y 的所有元素是否都包含在集合 x 中:
x = {"f", "e", "d", "c", "b", "a"}
y = {"a", "b", "c"}
z = x.issuperset(y) 
print(z)

#输出结果为:
True


# 如果没有全部包含返回 False:
x = {"f", "e", "d", "c", "b"}
y = {"a", "b", "c"}
z = x.issuperset(y) 
print(z)

#输出结果为:
False

1.3.7 是否包含相同的元素——isdisjoint()

  • 如果没有返回 True,否则返回 False。
x = {"apple", "banana", "cherry"}
y = {"google", "runoob", "apple"}
z = {"google", "runoob", "baidu"}
# 判断集合 y 中是否包含集合 x 中的元素,如果没有返回 True, 有则返回 False
a = x.isdisjoint(y)
# 结果返回 False,说明集合 y 中有和 x 中相同的元素
print(a)

# 判断集合 y 中是否包含集合 x 中的元素,如果没有返回 True, 有则返回 False
a = x.isdisjoint(z)
# 结果返回 True,说明集合 z 中没有和 x 中相同的元素
print(a)

#输出结果:
False
True

1.3.8 更新为交集——intersection_update()

  • intersection() 方法是返回一个新的交集集合
  • intersection_update() 方法是在原始的集合上移除不重叠的元素。
# 返回一个无返回值的集合交集
x = {"apple", "banana", "cherry"}
y = {"google", "runoob", "apple"}
x.intersection_update(y)
print(x)

x = {"a", "b", "c"}
y = {"c", "d", "e"}
z = {"f", "g", "c"}
x.intersection_update(y, z)
print(x)

# 输出结果:
{'apple'}
{'c'}

1.3.9 更新为差集——difference_update()

  • difference()返回一个新的差集集合
  • difference_update()直接在原来的集合中移除元素,没有返回值。
x = {"apple", "banana", "cherry"}
y = {"google", "microsoft", "apple"}

x.difference_update(y)

print(x)
结果为:
{'banana', 'cherry'}

1.3.10 更新为异或集——symmetric_difference_update()

  • 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。
# 在原始集合 x 中移除与 y 集合中的重复元素,并将不重复的元素插入到集合 x 中:
x = {"apple", "banana", "cherry"}
y = {"google", "runoob", "apple"}
x.symmetric_difference_update(y)
print(x)

#输出结果:
{'runoob', 'cherry', 'banana', 'google'}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值