python3中set函数_python3集合set – Python3教程

在本文中,你将学习关于Python集的所有内容,如何创建、添加或删除元素以及在Python中对集合执行的所有操作。

Python中的集合是什么?

集合是项目的无序集合,每个元素都是唯一的(没有重复),并且必须是不可变的(不能更改)。

然而,集合本身是可变的,我们可以添加或删除其中的项。

集合可用于进行数学集合运算,如并、交、对称差分等。

如何创建一个集合?

通过将所有项(元素)放在花括号{}中,用逗号分隔或使用内置函数set()来创建集合。

它可以有任意数量的项目,它们可能是不同类型的(整数、浮点数、元组、字符串等)。但是一个集合不能有一个可变的元素,比如list、set或dictionary作为它的元素。

my_set = {1, 2, 3}

print(my_set)

my_set = {1.0, "Hello", (1, 2, 3)}

print(my_set)

也可以尝试以下示例。

# 集合没有重复元素

# 输出: {1, 2, 3, 4}

my_set = {1,2,3,4,3,2}

print(my_set)

# 集合不能有可变项

# 这里[3,4]是一个可变列表

# 使用这个列表会抛出一个错误

# TypeError: unhashable type: 'list'

#my_set = {1, 2, [3, 4]}

# 我们可以从列表中生成集合

# 输出: {1, 2, 3}

my_set = set([1,2,3,2])

print(my_set)

创建一个空集有点棘手。

空花括号{}将在Python中创建一个空字典,为了创建一个没有任何元素的集合,我们使用了没有任何参数的set()函数。

# 使用{}

a = {}

# 输出:

print(type(a))

# 使用set()

a = set()

# 输出:

print(type(a))

如何在Python中更改集合?

集是可变的,但是由于它们是无序的,索引就没有意义了。

我们不能使用索引或切片访问或更改set元素,Set不支持它。

我们可以使用add()方法添加单个元素,使用update()方法添加多个元素,update()方法的参数可以是元组、列表、字符串或其他集合,在所有情况下,应该避免重复。

# 初始化

my_set = {1,3}

print(my_set)

# 使用下面的代码会抛出一个错误

# TypeError: 'set' object does not support indexing

#my_set[0]

# 添加一个元素

# 输出: {1, 2, 3}

my_set.add(2)

print(my_set)

# 添加多个元素

# 输出: {1, 2, 3, 4}

my_set.update([2,3,4])

print(my_set)

# 输出: {1, 2, 3, 4, 5, 6, 8}

my_set.update([4,5], {1,6,8})

print(my_set)

如何从集合中删除元素?

可以使用方法discard

()和remove()从集合中删除特定项。

两者之间的惟一区别是,在使用discard ()时,如果这个项在集合中不存在,它将保持不变,但是remove()将在这种情况下引发错误。

下面的示例将对此进行说明。

my_set = {1, 3, 4, 5, 6}

print(my_set)

# 输出: {1, 3, 5, 6}

my_set.discard(4)

print(my_set)

# 输出: {1, 3, 5}

my_set.remove(6)

print(my_set)

# 输出: {1, 3, 5}

my_set.discard(2)

print(my_set)

# 使用以下代码会抛出一个错误

# 输出: KeyError: 2

#my_set.remove(2)

类似地,我们可以使用pop()方法删除和返回一个项。

设置为无序,无法确定哪一项将弹出,它是完全任意的。

我们还可以使用clear()从集合中删除所有项。

my_set = set("HelloWorld")

print(my_set)

# 输出: 随机元素

print(my_set.pop())

# 输出: random element

my_set.pop()

print(my_set)

#输出: set()

my_set.clear()

print(my_set)

Python集合操作

集合可用于进行并、交、差、对称差等数学集合运算,我们可以通过操作符或方法来实现。

让我们考虑以下两组用于以下操作的集合。

>>> A = {1, 2, 3, 4, 5}

>>> B = {4, 5, 6, 7, 8}

集合的并集

A和B的并集是来自这两个集合的所有元素的集合。

Union是使用|操作符执行的,也可以使用union()方法来完成。

A = {1, 2, 3, 4, 5}

B = {4, 5, 6, 7, 8}

# 输出: {1, 2, 3, 4, 5, 6, 7, 8}

print(A | B)

在Python

shell上尝试以下示例。

>>> A.union(B)

{1, 2, 3, 4, 5, 6, 7, 8}

>>> B.union(A)

{1, 2, 3, 4, 5, 6, 7, 8}

集合的交集

A和B的交集是两个集合中共同的一组元素。

交集使用&运算符执行,可以使用交集()方法来完成相同的任务。

A = {1, 2, 3, 4, 5}

B = {4, 5, 6, 7, 8}

# 输出: {4, 5}

print(A & B)

在Python

shell上尝试以下示例。

>>> A.intersection(B)

{4, 5}

>>> B.intersection(A)

{4, 5}

集合的差集

A和B的区别(A – B)是只在A中而不在B中存在的一组元素。

差集是用-运算符来执行的,可以使用方法difference()实现相同的功能。

A = {1, 2, 3, 4, 5}

B = {4, 5, 6, 7, 8}

# 输出: {1, 2, 3}

print(A - B)

在Python

shell上尝试以下示例。

>>> A.difference(B)

{1, 2, 3}

>>> B - A

{8, 6, 7}

>>> B.difference(A)

{8, 6, 7}

集合的对称差分

A和B的对称差分是A和B中的一组元素,除了它们是共同的。

对称差分是使用^运算符来实现的,可以使用symmetric_difference()方法来完成相同的工作。

A = {1, 2, 3, 4, 5}

B = {4, 5, 6, 7, 8}

# 输出: {1, 2, 3, 6, 7, 8}

print(A ^ B)

在Python

shell上尝试以下示例。

>>> A.symmetric_difference(B)

{1, 2, 3, 6, 7, 8}

>>> B.symmetric_difference(A)

{1, 2, 3, 6, 7, 8}

不同的Python集合方法

有许多set方法,其中一些我们已经在上面使用过,下面是set对象中可用的所有方法的列表。

Python集合方法

方法描述

add()将元素添加到集合中

clear()从集合中移除所有元素

copy()返回集合的副本

difference()将两个或多个集合的差作为一个新集合返回

difference_update()从这个集合中移除另一个集合的所有元素

discard()如果元素是成员,则从集合中移除该元素。(如果元素不在集合中,则不执行任何操作)

intersection()以新集合的形式返回两个集合的交集

intersection_update()用自身与他人的交集更新集合

isdisjoint()如果两个集合的交集为空,则返回True

issubset()如果另一个集合包含此集合,则返回True

issuperset()如果这个集合包含另一个集合,则返回True

pop()移除并返回任意的集合元素。如果集合为空,则引发KeyError

remove()从集合中移除一个元素。如果该元素不是成员,则引发密钥错误

symmetric_difference()将两个集合的对称差作为一个新集合返回

symmetric_difference_update()更新具有自身和他人的对称差异的集合

union()返回新集合中集合的并集

update()用自身和其他的并集更新集合

其他集合的操作

集合成员测试

我们可以使用关键字in来测试一个项是否存在于一个集合中。

my_set = set("apple")

# 输出: True

print('a' in my_set)

# 输出: False

print('p' not in my_set)

遍历一个集合

使用for循环,我们可以遍历集合中的每个项。

>>> for letter in set("apple"):

... print(letter)

...

a

p

e

l

集合的内置函数

内置函数如all()、any()、enumerate()、len()、max()、min()、sort()、sum()等常用来执行不同的任务。

集合的内置函数

函数说明

all()如果集合的所有元素都为真(或者集合为空),则返回True。

any()如果集合中的任何元素为真,则返回真。如果集合为空,则返回False。

enumerate()返回一个枚举对象。它将集合的所有项的索引和值作为一对包含。

len()返回集合中的长度(项数)。

max()返回集合中最大的项。

min()返回集合中最小的项。

sorted()从集合中的元素返回一个新的排序列表(不对集合本身排序)。

sum()重新调整集合中所有元素的和。

Python冻结集Frozenset

Frozenset是一个新类,它有一组的特点,但其分配元素无法改变一次,元组是不可变的列表,frozensets则是不可变的集合。

可变的集合不可散列化,所以他们不能被用作字典键,另一方面frozensets 是可散列的,并且可以作为字典的关键。

Frozensets可以使用函数frozenset ()创建。

这个数据类型支持方法像copy(),

difference(), intersection(), isdisjoint(), issubset(), issuperset(), symmetric_difference()

和union(),若是不可变的则不支持添加或删除元素。

A = frozenset([1, 2, 3, 4])

B = frozenset([3, 4, 5, 6])

在Python

shell上尝试这些示例。

>>> A.isdisjoint(B)

False

>>> A.difference(B)

frozenset({1, 2})

>>> A | B

frozenset({1, 2, 3, 4, 5, 6})

>>> A.add(3)

...

AttributeError: 'frozenset' object has no attribute 'add'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值