python 全网最详细的集合set详解

2023-10-13 17:30:32 浏览数 (1)

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

1、构造集合

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

1、使用大括号{}

代码语言:javascript复制
 basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
 
 print(basket) # {'apple', 'orange', 'banana', 'pear'}
 

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

 2、使用set()函数

代码语言:javascript复制
 fruit = set(("apple", "banana", "cherry")) # 请留意这个双括号
 
 print(fruit) # {'banana', 'apple', 'cherry'}
 

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

 2、基本计算

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

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

代码语言:javascript复制

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

 2.1 -
代码语言:javascript复制
print(a - b)  # {'e', 'd', 'f', 'c'}

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

 2.2 |
代码语言:javascript复制
print(a | b)  # {'d', 'b', 'e', 'c', 'g', 'f', 'a'}

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

 2.3 &
代码语言:javascript复制
print(a & b)  # {'a', 'b', 'g'}

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

 2.4 ^(反交集)
代码语言:javascript复制
print(a ^ b)  # {'e', 'c', 'd', 'f'}

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

 3、访问项目

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

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

实例

遍历集合,并打印值

代码语言:javascript复制
 fruit = {'apple', 'banana', 'cherry'}
 
 for key in fruit:
 
 print(key)
 

检查 set 中是否存在 “banana”

代码语言:javascript复制
 fruit = {'apple', 'banana', 'cherry'}
 
 print('banana' in fruit)
 

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

 4、内置函数

4.1 打印输出 print()

1、print()函数

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

 4.2 计算集合内元素 len()

2、len()函数

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

代码语言:javascript复制
 print(len(basket)) # 4
 
 print(len(fruit)) # 3

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

4.3 返回变量类型 type()

3、type()函数

代码语言:javascript复制
print(type(basket))  # <class 'set'>

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

4.4 删除集合 del 

4、del函数

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

代码语言:javascript复制
 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() 方法用于给集合添加元素,如果添加的元素在集合中已存在,则不执行任何操作。

语法

代码语言:javascript复制
set.add(element)

参数值

参数

描述

element

必需。要添加到集合的元素。

实例

向 fruits 集合添加一个元素:

代码语言:javascript复制
 fruits = {"apple", "banana", "cherry"}
 
 fruits.add("orange") 
 
 print(fruits)
 

输出结果:

代码语言:javascript复制
{'apple', 'banana', 'orange', 'cherry'}

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

代码语言:javascript复制
 fruits = {"apple", "banana", "cherry"}
 
 fruits.add("apple")
 
 print(fruits)
 

输出结果:

代码语言:javascript复制
{'apple', 'banana', 'cherry'}

2、updata()方法

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

语法

代码语言:javascript复制
set.update(set)

参数值

参数

描述

set

必需。插入当前集合的集合。

实例

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

代码语言:javascript复制
 x = {"apple", "banana", "cherry"}
 
 y = {"google", "runoob", "apple"} 
 
 x.update(y) 
 
 print(x)
 

输出结果:

代码语言:javascript复制
{'banana', 'apple', 'google', 'runoob', 'cherry'}
5.2 移除元素 remove()、discard()、pop()

1、remove()方法

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

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

语法

代码语言:javascript复制
set.remove(item)

参数值

参数

描述

item

必需。需要检索并删除的项目。

实例

移除元素 banana:

代码语言:javascript复制
 fruits = {"apple", "banana", "cherry"}
 
 fruits.remove("banana") 
 
 print(fruits)

 输出结果:

代码语言:javascript复制
{'cherry', 'apple'}

2、discard()方法

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

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

语法

代码语言:javascript复制
set.discard(value)

参数值

参数

描述

value

必需。要检索并删除的项目。

实例

移除集合中的元素 banana:

代码语言:javascript复制
 fruits = {"apple", "banana", "cherry"}
 
 fruits.discard("banana") 
 
 print(fruits)

输出结果:

代码语言:javascript复制
{'cherry', 'apple'}

3、pop()方法

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

语法

代码语言:javascript复制
set.pop()

参数值

无参数值。

实例

随机移除一个元素:

代码语言:javascript复制
 fruits = {"apple", "banana", "cherry"}
 
 fruits.pop() 
 
 print(fruits)

输出结果:

代码语言:javascript复制
{'apple', 'banana'}

使用pop()方法删除项目,但此方法将删除最后一项。 同时请记住,集合set是无序的,因此您也不知道被删除的是什么项目。

 5.3 清空集合 clear()

1、clear()方法

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

语法

代码语言:javascript复制
set.clear()

参数值

无参数。

实例

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

代码语言:javascript复制
 fruits = {"apple", "banana", "cherry"}
 
 fruits.clear()
 
 print(fruits)

输出结果:

代码语言:javascript复制
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() 方法返回两个集合的并集,即包含了所有集合的元素,重复的元素只会出现一次。

语法

代码语言:javascript复制
set.union(set1, set2 ...)

参数值

参数

描述

set1

必需。要整合的集合。

set2

可选。要整合的另一集合。您能够比较任意多的集合。集合由逗号分隔。

实例

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

代码语言:javascript复制
 set1 = {'a', 'b', 'c'}
 
 set2 = {1, 2, 3, 'c'}
 
 print(set1.union(set2))
 

输出结果:

代码语言:javascript复制
{1, 2, 'b', 3, 'c', 'a'}

合并多个集合:

代码语言:javascript复制
 set1 = {'a', 'b', 'c'}
 
 set2 = {1, 2, 3}
 
 set3 = {'A', 'B'}
 
 print(set1.union(set2, set3))
 

输出结果:

代码语言:javascript复制
{1, 2, 3, 'B', 'b', 'A', 'a', 'c'}

2、update()方法

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

实例

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

代码语言:javascript复制
 set1 = {'a', 'b', 'c'}
 
 set2 = {1, 2, 3}
 
 set1.update(set2)
 
 print(set1)
 

输出结果:

代码语言:javascript复制
{1, 2, 3, 'b', 'a', 'c'}

注释

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

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

语法

代码语言:javascript复制
set.copy()

参数值

无参数。

实例

复制 fruits 集合:

代码语言:javascript复制
 fruits = {"apple", "banana", "cherry"}
 
 print(fruits.copy())

输出结果:

代码语言:javascript复制
{'apple', 'banana', 'cherry'}
5.6 判断是否包含相同元素 isdisjoint()

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

语法

代码语言:javascript复制
set.isdisjoint(set)

参数值

参数

描述

set

必需。要在其中检索相同项目的集合。

实例

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

代码语言:javascript复制
 x = {'a', 'b', 'c'}
 
 y = {'x', 'y', 'z'}
 
 print(x.isdisjoint(y))

输出结果:

代码语言:javascript复制
True

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

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

1、intersection()方法

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

语法

代码语言:javascript复制
set.intersection(set1, set2 ... etc)

参数值

参数

描述

set1

必需。要在其中检索相同项目的集合。

set2

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

实例

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

代码语言:javascript复制
 x = {'a', 'b', 'c'}
 
 y = {'x', 'y', 'z', 'c'}
 
 print(x.intersection(y))
 

输出结果:

代码语言:javascript复制
{'c'}

计算多个集合的交集:

代码语言:javascript复制
 x = {'a', 'b', 'c'}
 
 y = {'x', 'y', 'z', 'c'}
 
 z = {'c', 'a', 'd'}
 
 print(x.intersection(y, z))
 

输出结果:

代码语言:javascript复制
{'c'}

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

2、intersection_update()方法

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

语法

代码语言:javascript复制
set.intersection_update(set1, set2 ... etc)

参数值

参数

描述

set1

必需。要在其中检索相等项目的集合。

set2

可选。要在其中检索相等项目的另一集合。您能够比较任意多的集合。集合由逗号分隔。

实例

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

代码语言:javascript复制
 x = {'a', 'b', 'c'} # y 集合不包含 a,被移除
 
 y = {'x', 'y', 'b', 'c'}
 
 x.intersection_update(y)
 
 print(x)
 

输出结果:

代码语言:javascript复制
{'c'}

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

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

1、issubset()方法

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

语法

代码语言:javascript复制
set.issubset(set)

参数值

参数

描述

set

必需。在其中检索相等项目的集合。

实例

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

代码语言:javascript复制
 x = {'a', 'b', 'c'}
 
 y = {'x', 'y', 'z', 'a', 'b', 'c'}
 
 print(x.issubset(y))
 

输出结果:

代码语言:javascript复制
True

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

代码语言:javascript复制
 x = {'a', 'b', 'c'}
 
 y = {'x', 'y', 'z', 'a'}
 
 print(x.issubset(y))
 

输出结果:

代码语言:javascript复制
False

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

 2、issuperset()方法

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

语法

代码语言:javascript复制
set.issuperset(set)

参数值

参数

描述

set

必需。要在其中检索相等项目的集合。

实例

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

代码语言:javascript复制
 x = {'a', 'b', 'c', 'x', 'y', 'z'}
 
 y = {'a', 'b', 'c'}
 
 print(x.issuperset(y))
 

 输出结果:

代码语言:javascript复制
True

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

代码语言:javascript复制
 x = {'a', 'x', 'y', 'z'}
 
 y = {'a', 'b', 'c'}
 
 print(x.issuperset(y))
 

输出结果:

代码语言:javascript复制
False

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

 5.9 差集 difference() 、difference_update()

1、difference()方法

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

语法

代码语言:javascript复制
set.difference(set)

参数值

参数

描述

set

必需。要检查其中差异的项目。

实例

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

代码语言:javascript复制
 x = {'a', 'b', 'c', 'x', 'y', 'z'}
 
 y = {'a', 'b', 'c'}
 
 print(x.difference(y))
 

输出结果:

代码语言:javascript复制
{'x', 'y', 'z'}

2、difference_update()方法

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

语法

代码语言:javascript复制
set.difference_update(set)

参数值

参数

描述

set

必需。要检查其中差异的集合。

实例

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

代码语言:javascript复制
 x = {'a', 'b', 'c', 'x', 'y', 'z'}
 
 y = {'a', 'b', 'c'}
 
 x.difference_update(y)
 
 print(x)
 

输出结果:

代码语言:javascript复制
{'x', 'z', 'y'}

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

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

1、symmetric_difference()方法

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

语法

代码语言:javascript复制
set.symmetric_difference(set)

参数值

参数

描述

set

必需。用于检查匹配项的集合。

实例

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

代码语言:javascript复制
 x = {'a', 'b', 'c', 'x', 'y', 'z'}
 
 y = {'a', 'b', 'c', 'Q', 'W', 'E'}
 
 print(x.symmetric_difference(y))
 

 输出结果:

代码语言:javascript复制
{'x', 'Q', 'z', 'E', 'y', 'W'}

2、symmetric_difference_update()方法

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

语法

代码语言:javascript复制
set.symmetric_difference_update(set)

参数值

参数

描述

set

必需。用于检查匹配项的集合。

实例

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

代码语言:javascript复制
 x = {'a', 'b', 'c', 'x', 'y', 'z'}
 
 y = {'a', 'b', 'c', 'Q', 'W', 'E'}
 
 x.symmetric_difference_update(y)
 
 print(x)
 

输出结果:

代码语言:javascript复制
{'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()

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

0 人点赞