集合(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种,分别是-
、|
、&
和^
。
代码语言: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()
函数
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'}
代码语言:javascript复制如果该元素已存在,则 add() 方法就不会添加元素。
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() | 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中 |