Python 集合set详解(超详细)

Python内置函数/方法详解—集合set

集合(set)是一个无序不重复元素序列。

1、构造集合

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

1、使用大括号{}

basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print(basket)  # {'apple', 'orange', 'banana', 'pear'}

当使用print()函数打印输出时,会自动将集合中重复的元素去除,且每次打印返回的顺序并不和初始的一致

2、使用set()函数

fruit = set(("apple", "banana", "cherry"))  # 请留意这个双括号
print(fruit)  # {'banana', 'apple', 'cherry'}

在使用set()函数创建集合时,一定要注意双括号

2、基本计算

经过上述学习,我们已经知道如何创建集合。而两个集合之间的计算有4种,分别是-|&^

先创建两个集合,方便下面对其进行运算。

a = set('abcdefg')
b = set('abg')

2.1 -

print(a - b)  # {'e', 'd', 'f', 'c'}

a - b 表示:集合 a 中包含而集合 b 中不包含的元素

2.2 |

print(a | b)  # {'d', 'b', 'e', 'c', 'g', 'f', 'a'}

a | b 表示:集合 a 或集合 b 中包含的所有元素

2.3 &

print(a & b)  # {'a', 'b', 'g'}

a & b 表示:集合 a 和集合 b 都包含了的元素

2.4 ^

print(a ^ b)  # {'e', 'c', 'd', 'f'}

a ^ b 表示:不同时包含集合 a 和集合 b 的元素

3、访问项目

我们无法通过引用索引来访问 set 中的项目,因为 set 是无序的,项目没有索引

但是可以使用 for 循环遍历 set 项目,或者使用 in 关键字查询集合中是否存在指定值。

实例

遍历集合,并打印值:

fruit = {'apple', 'banana', 'cherry'}
for key in fruit:
    print(key)

检查 set 中是否存在 “banana”

fruit = {'apple', 'banana', 'cherry'}
print('banana' in fruit)

若输出True,则表示指定值存在于该集合中;若输出False,则表示指定值不存在于该集合中。

4、内置函数

4.1 打印输出 print()

1、print()函数

从上述构造集合中,我们可以得知 print() 的作用就是打印输出小括号() 里的内容或值。

4.2 计算集合内元素 len()

2、len()函数

当我们想要获取集合 set 的长度,即确定集合中有多少项,就要使用 len() 方法。

print(len(basket))  # 4
print(len(fruit))  # 3

我们注意到,在上述构造集合 basket 和 fruit 时,在 {} 中填入6个元素,当我们使用len()函数定长时,会发现其自动去除重复的元素,再返回。

4.3 返回变量类型 type()

3、type()函数

print(type(basket))  # <class 'set'>

当我们使用 {}set() 构造好集合时,对其使用 type() 函数,会输出set,则表明这是一个集合。

4.4 删除集合 del

4、del函数

我们已经构造好 basket 和 fruit 这两个集合,如果需要对其删除则使用del函数

fruit = set(("apple", "banana", "cherry"))  # 请留意这个双括号
del fruit
print(fruit)  # NameError: name 'fruit' is not defined.

注意:使用完del()函数删除集合后,如再用print()函数打印时,会报错NameError: name 'fruit' is not defined.,意为fruit未被定义,说明已删除。

5、内置方法

5.1 添加元素 add()、updata()

1、add()方法

add() 方法用于给集合添加元素,如果添加的元素在集合中已存在,则不执行任何操作。

语法

set.add(element)

参数值

参数描述
element必需。要添加到集合的元素。

实例

向 fruits 集合添加一个元素:

fruits = {"apple", "banana", "cherry"}
fruits.add("orange") 
print(fruits)

输出结果:

{'apple', 'banana', 'orange', 'cherry'}

如果该元素已存在,则 add() 方法就不会添加元素。

fruits = {"apple", "banana", "cherry"}
fruits.add("apple")
print(fruits)

输出结果:

{'apple', 'banana', 'cherry'}

2、updata()方法

update() 方法用于修改当前集合,可以添加新的元素或集合到当前集合中,如果添加的元素在集合中已存在,则该元素只会出现一次,重复的会忽略。

语法

set.update(set)

参数值

参数描述
set必需。插入当前集合的集合。

实例

合并两个集合,重复元素只会出现一次:

x = {"apple", "banana", "cherry"}
y = {"google", "runoob", "apple"} 
x.update(y) 
print(x)

输出结果:

{'banana', 'apple', 'google', 'runoob', 'cherry'}

5.2 移除元素 remove()、discard()、pop()

1、remove()方法

remove() 方法用于移除集合中的指定元素。

该方法不同于 discard() 方法,因为 remove() 方法在移除一个不存在的元素时会发生错误,而 discard() 方法不会。

语法

set.remove(item)

参数值

参数描述
item必需。需要检索并删除的项目。

实例

移除元素 banana:

fruits = {"apple", "banana", "cherry"}
fruits.remove("banana") 
print(fruits)

输出结果:

{'cherry', 'apple'}

2、discard()方法

discard() 方法用于移除指定的集合元素。

该方法不同于 remove() 方法,因为 remove() 方法在移除一个不存在的元素时会发生错误,而 discard() 方法不会。

语法

set.discard(value)

参数值

参数描述
value必需。要检索并删除的项目。

实例

移除集合中的元素 banana:

fruits = {"apple", "banana", "cherry"}
fruits.discard("banana") 
print(fruits)

输出结果:

{'cherry', 'apple'}

3、pop()方法

pop() 方法用于随机移除一个元素。

语法

set.pop()

参数值

无参数值。

实例

随机移除一个元素:

fruits = {"apple", "banana", "cherry"}
fruits.pop()  
print(fruits)

输出结果:

{'apple', 'banana'}

使用pop()方法删除项目,但此方法将删除最后一项。

同时请记住,集合set是无序的,因此您也不知道被删除的是什么项目。

5.3 清空集合 clear()

1、clear()方法

clear() 方法用于移除集合中的所有元素。

语法

set.clear()

参数值

无参数。

实例

移除 fruits 集合中的所有元素:

fruits = {"apple", "banana", "cherry"}
fruits.clear()
print(fruits)

输出结果:

set()

特别注意:clear() 功能是移除集合中所有元素,而del 功能是删除集合

所以,当对一个集合使用clear()方法del函数,并分别对其使用print()函数打印输出时,前者会返回一个空的集合即set(),而后者会报错即NameError: name 'fruit' is not defined.

clear() 从内存删除集合与清空集合,但内存地址不删除,del() 则会从内存中删除。

5.4 合并集合 union()、update()

在Python中,有几种方法可以连接两个或多个集合。

可以使用 union() 方法返回包含两个集合中所有项目的新集合,也可以使用 update() 方法将一个集合中的所有项目插入另一个集合中。

1、union()方法

union() 方法返回两个集合的并集,即包含了所有集合的元素,重复的元素只会出现一次。

语法

set.union(set1, set2 ...)

参数值

参数描述
set1必需。要整合的集合。
set2可选。要整合的另一集合。您能够比较任意多的集合。集合由逗号分隔。

实例

合并两个集合,重复元素只会出现一次:

set1 = {'a', 'b', 'c'}
set2 = {1, 2, 3, 'c'}
print(set1.union(set2))

输出结果:

{1, 2, 'b', 3, 'c', 'a'}

合并多个集合:

set1 = {'a', 'b', 'c'}
set2 = {1, 2, 3}
set3 = {'A', 'B'}
print(set1.union(set2, set3))

输出结果:

{1, 2, 3, 'B', 'b', 'A', 'a', 'c'}

2、update()方法

update() 方法在前面已经讲解过,在此仅作实例演示。

实例

update() 方法将 set2 中的项目插入 set1 中:

set1 = {'a', 'b', 'c'}
set2 = {1, 2, 3}
set1.update(set2)
print(set1)

输出结果:

{1, 2, 3, 'b', 'a', 'c'}

注释

  • union() 和 update() 都将排除任何重复项。
  • 还有其他方法将两个集合连接起来,并且仅保留重复项,或者永远不保留重复项。

5.5 拷贝集合 copy()

copy() 方法用于拷贝一个集合。

语法

set.copy()

参数值

无参数。

实例

复制 fruits 集合:

fruits = {"apple", "banana", "cherry"}
print(fruits.copy())

输出结果:

{'apple', 'banana', 'cherry'}

5.6 判断是否包含相同元素 isdisjoint()

isdisjoint() 方法用于判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。

语法

set.isdisjoint(set)

参数值

参数描述
set必需。要在其中检索相同项目的集合。

实例

判断集合 y 中是否有包含 集合 x 的元素:

x = {'a', 'b', 'c'}
y = {'x', 'y', 'z'}
print(x.isdisjoint(y))

输出结果:

True

注意isdisjoint() 方法在判断两个集合是否包含相同元素时,如果不包含相同的元素则返回True,而包含相同的元素则返回False

5.7 返回交集 intersection()、intersection_update()

1、intersection()方法

intersection() 方法用于返回两个或更多集合中都包含的元素,即交集。

语法

set.intersection(set1, set2 ... etc)

参数值

参数描述
set1必需。要在其中检索相同项目的集合。
set2可选。其他需要在其中检索相同项目的集合。您可以比较任意多的集合。集合之间由逗号分隔。

实例

返回一个新集合,该集合的元素既包含在集合 x 又包含在集合 y 中:

x = {'a', 'b', 'c'}
y = {'x', 'y', 'z', 'c'}
print(x.intersection(y))

输出结果:

{'c'}

计算多个集合的交集:

x = {'a', 'b', 'c'}
y = {'x', 'y', 'z', 'c'}
z = {'c', 'a', 'd'}
print(x.intersection(y, z))

输出结果:

{'c'}

返回的集合仅包含两个集合中都存在的项目,或者如果使用两个以上的集合进行比较,则在所有集合中都存在。

2、intersection_update()方法

intersection_update() 方法用于获取两个或更多集合中都重叠的元素,即计算交集。

语法

set.intersection_update(set1, set2 ... etc)

参数值

参数描述
set1必需。要在其中检索相等项目的集合。
set2可选。要在其中检索相等项目的另一集合。您能够比较任意多的集合。集合由逗号分隔。

实例

移除 x 集合中不存在于 y 集合中的元素:

x = {'a', 'b', 'c'}  # y 集合不包含 a,被移除
y = {'x', 'y', 'b', 'c'}
x.intersection_update(y)
print(x)

输出结果:

{'b', 'c'}

计算多个集合的并集:

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

输出结果:

{'c'}

intersection_update() 方法不同于 intersection() 方法,因为 intersection() 方法是返回一个新的集合,而 intersection_update() 方法是在原始的集合上移除不重叠的元素。

5.8 判断子集 issubset() 、issuperset()

1、issubset()方法

issubset() 方法用于判断集合的所有元素是否都包含在指定集合中,如果是则返回 True,否则返回 False。

语法

set.issubset(set)

参数值

参数描述
set必需。在其中检索相等项目的集合。

实例

如果集合 y 中存在集合 x 中的所有项目,则返回 True:

x = {'a', 'b', 'c'}
y = {'x', 'y', 'z', 'a', 'b', 'c'}
print(x.issubset(y))

输出结果:

True

如果没有全部包含返回 False:

x = {'a', 'b', 'c'}
y = {'x', 'y', 'z', 'a'}
print(x.issubset(y))

输出结果:

False

注意:使用x.issubset(y)时,简单地说,当集合 x 中所有项目都存在于集合 y 中时,返回True,反之(集合 x 中有一个或多个都不存在于集合 y 中,就返回 False)。

2、issuperset()方法

issuperset() 方法用于判断指定集合的所有元素是否都包含在原始的集合中,如果是则返回 True,否则返回 False。

语法

set.issuperset(set)

参数值

参数描述
set必需。要在其中检索相等项目的集合。

实例

判断集合 y 的所有元素是否都包含在集合 x 中:

x = {'a', 'b', 'c', 'x', 'y', 'z'}
y = {'a', 'b', 'c'}
print(x.issuperset(y))

输出结果:

True

如果没有全部包含返回 False:

x = {'a', 'x', 'y', 'z'}
y = {'a', 'b', 'c'}
print(x.issuperset(y))

输出结果:

False

issuperset()issubset() 类似,如果全都包含就返回True,反之(有一个或多个未包含)就返回False。

5.9 差集 difference() 、difference_update()

1、difference()方法

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

语法

set.difference(set)

参数值

参数描述
set必需。要检查其中差异的项目。

实例

返回一个集合,元素包含在集合 x ,但不在集合 y :

x = {'a', 'b', 'c', 'x', 'y', 'z'}
y = {'a', 'b', 'c'}
print(x.difference(y))

输出结果:

{'x', 'y', 'z'}

2、difference_update()方法

difference_update() 方法用于移除两个集合中都存在的元素。

语法

set.difference_update(set)

参数值

参数描述
set必需。要检查其中差异的集合。

实例

移除两个集合都包含的元素:

x = {'a', 'b', 'c', 'x', 'y', 'z'}
y = {'a', 'b', 'c'}
x.difference_update(y)
print(x)

输出结果:

{'x', 'z', 'y'}

difference_update() 方法与 difference() 方法的区别在于 difference() 方法返回一个移除相同元素的新集合,而 difference_update() 方法是直接在原来的集合中移除元素,没有返回值

5.10 移除元素 symmetric_difference()、symmetric_difference_update()

1、symmetric_difference()方法

symmetric_difference() 方法返回两个集合中不重复的元素集合,即会移除两个集合中都存在的元素。

语法

set.symmetric_difference(set)

参数值

参数描述
set必需。用于检查匹配项的集合。

实例

返回两个集合组成的新集合,但会移除两个集合的重复元素:

x = {'a', 'b', 'c', 'x', 'y', 'z'}
y = {'a', 'b', 'c', 'Q', 'W', 'E'}
print(x.symmetric_difference(y))

输出结果:

{'x', 'Q', 'z', 'E', 'y', 'W'}

2、symmetric_difference_update()方法

symmetric_difference_update() 方法移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。

语法

set.symmetric_difference_update(set)

参数值

参数描述
set必需。用于检查匹配项的集合。

实例

在原始集合 x 中移除与 y 集合中的重复元素,并将不重复的元素插入到集合 x 中:

x = {'a', 'b', 'c', 'x', 'y', 'z'}
y = {'a', 'b', 'c', 'Q', 'W', 'E'}
x.symmetric_difference_update(y)
print(x)

输出结果:

{'z', 'Q', 'x', 'W', 'E', 'y'}

6、 总结

函数描述
print()打印输出
len()计算集合内元素
type()返回变量类型
del删除集合
方法描述
add()为集合添加元素
update()给集合添加元素
remove()移除指定元素
discard()删除集合中指定的元素
pop()随机移除元素
clear()移除集合中的所有元素
union()返回两个集合的并集
copy()拷贝一个集合
isdisjoint()判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False
intersection()返回集合的交集
intersection_update()返回集合的交集
issubset()判断指定集合是否为该方法参数集合的子集
issuperset()判断该方法的参数集合是否为指定集合的子集
difference()返回多个集合的差集
difference_update()移除集合中的元素,该元素在指定的集合也存在
symmetric_difference()返回两个集合中不重复的元素集合。
symmetric_difference_update()移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中

以上就是本文的全部内容啦!如果对您有帮助,麻烦点赞啦!收藏啦!欢迎各位评论区留言!!!

最后编辑于:2022/7/23 15:43

  • 97
    点赞
  • 522
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_leoatliang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值