Python 集合set详解(超详细)

简介: 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

目录
相关文章
|
1月前
|
安全 网络安全 文件存储
思科设备巡检命令Python脚本大集合
【10月更文挑战第18天】
76 1
思科设备巡检命令Python脚本大集合
|
1月前
|
存储 NoSQL 关系型数据库
Redis 集合(Set)
10月更文挑战第17天
37 5
|
1月前
|
算法 Java 数据处理
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。HashSet基于哈希表实现,提供高效的元素操作;TreeSet则通过红黑树实现元素的自然排序,适合需要有序访问的场景。本文通过示例代码详细介绍了两者的特性和应用场景。
41 6
|
1月前
|
存储 Java 数据处理
Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位
【10月更文挑战第16天】Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位。本文通过快速去重和高效查找两个案例,展示了Set如何简化数据处理流程,提升代码效率。使用HashSet可轻松实现数据去重,而contains方法则提供了快速查找的功能,彰显了Set在处理大量数据时的优势。
33 2
|
1月前
|
存储 算法 Java
Java Set因其“无重复”特性在集合框架中独树一帜
【10月更文挑战第14天】Java Set因其“无重复”特性在集合框架中独树一帜。本文深入解析Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定的数据结构(哈希表、红黑树)确保元素唯一性,并提供最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的`hashCode()`与`equals()`方法。
31 3
|
19天前
|
存储 Java
判断一个元素是否在 Java 中的 Set 集合中
【10月更文挑战第30天】使用`contains()`方法可以方便快捷地判断一个元素是否在Java中的`Set`集合中,但对于自定义对象,需要注意重写`equals()`方法以确保正确的判断结果,同时根据具体的性能需求选择合适的`Set`实现类。
|
19天前
|
存储 Java 开发者
在 Java 中,如何遍历一个 Set 集合?
【10月更文挑战第30天】开发者可以根据具体的需求和代码风格选择合适的遍历方式。增强for循环简洁直观,适用于大多数简单的遍历场景;迭代器则更加灵活,可在遍历过程中进行更多复杂的操作;而Lambda表达式和`forEach`方法则提供了一种更简洁的函数式编程风格的遍历方式。
|
19天前
|
Java 开发者
|
1月前
|
存储 Java 数据处理
Set 是 Java 集合框架中的一个接口,不包含重复元素且不保证元素顺序。
【10月更文挑战第16天】Java Set:无序之美,不重复之魅!Set 是 Java 集合框架中的一个接口,不包含重复元素且不保证元素顺序。通过 hashCode() 和 equals() 方法实现唯一性,适用于需要唯一性约束的数据处理。示例代码展示了如何使用 HashSet 添加和遍历元素,体现了 Set 的高效性和简洁性。
33 4
|
1月前
|
存储 Java 数据处理
Set 是 Java 集合框架中的一个接口,不包含重复元素且不保证元素顺序。
Java Set:无序之美,不重复之魅!Set 是 Java 集合框架中的一个接口,不包含重复元素且不保证元素顺序。它通过 hashCode() 和 equals() 方法确保元素唯一性,适用于需要唯一性约束的数据处理。示例代码展示了如何使用 HashSet 实现这一特性。
27 5
下一篇
无影云桌面