MEMOO
MEMOO
Published on 2025-04-18 / 3 Visits
0
0

Python集合及操作

摘要:在本节中,你将学习Python集合类型以及如何有效地使用它。

Python集合类型简介

Python集合是由不可变元素组成的无序序列。这意味着:

  • 集合中的元素是无序的。

  • 集合中的元素是唯一的。集合不允许存在重复元素。

  • 集合中的元素不能被修改。例如,它们可以是数字、字符串和元组,但不能是列表或字典。

在Python中定义一个集合,你要使用花括号 {}。例如:

skills = {'Python programming', 'Databases', 'Software design'}

请注意,字典也使用花括号,但它的元素是键值对。

要定义一个空集合,你不能像这样使用花括号:

empty_set = {}

……因为这样定义的是一个空字典。

因此,你需要使用内置的 set() 函数来定义空集合:

empty_set = set()

在布尔上下文环境中,空集合的求值结果为 False。例如:

skills = set()

if not skills:

    print('Empty sets are falsy')

输出:

Empty sets are falsy    

实际上,你可以将一个可迭代对象传递给 set() 函数来创建一个集合。例如,你可以将一个列表(列表是一种可迭代对象)传递给 set() 函数,如下所示:

skills = set(['Problem solving','Critical Thinking'])

print(skills)

输出:

{'Critical Thinking', 'Problem solving'}

请注意,元素的原始顺序可能无法保留。

如果一个可迭代对象包含重复元素set() 函数将会把这些重复元素去除。例如:

characters = set('letter')

print(characters)

输出:

{'r', 'l', 't', 'e'}

在这个例子中,字符串“letter”中有两个字母“e”和两个字母“t”,而 set() 函数会去除掉其中重复的字母。

获取集合大小

要获取一个集合中元素的数量,你可以使用内置的 len() 函数。

len(set)

例如:

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

size = len(ratings)

print(size)    

输出:

5

检查元素是否在集合中

要检查一个集合是否包含某个元素,你可以使用 in 运算符:

element in set

如果集合包含该元素in 运算符将返回 True。否则,它将返回 False。例如:

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

rating = 1

if rating in ratings:

    print(f'The set contains {rating}')

输出:

The set contains 1

要对 in 运算符进行取反操作,你可以使用 not 运算符。例如:

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

rating = 6

if rating not in ratings:

    print(f'The set does not contain {rating}')

输出:

The set does not contain 6

向集合添加元素

要向一个集合中添加一个元素,你可以使用 add() 方法:

set.add(element)

例如:

skills = {'Python programming', 'Software design'}

skills.add('Problem solving')

print(skills)

输出:

{'Problem solving', 'Software design', 'Python programming'}

从集合删除元素

要从一个集合中移除一个元素,你可以使用 remove() 方法:

set.remove(element)

例如:

skills = {'Problem solving', 'Software design', 'Python programming'}

skills.remove('Software design')

print(skills)

输出:

{'Problem solving', 'Python programming'}

如果你移除一个在集合中并不存在的元素,你将会得到一个错误(键错误)。例如:

skills = {'Problem solving', 'Software design', 'Python programming'}

skills.remove('Java')

错误:

KeyError: 'Java'

为了避免出现该错误,在移除元素之前,你应该使用 in 运算符来检查该元素是否在集合中:

skills = {'Problem solving', 'Software design', 'Python programming'}

if 'Java' in skills:

    skills.remove('Java')

为了更加方便,集合有 discard() 方法,它可以让你移除一个元素。并且如果该元素不在集合中,它也不会引发错误。

set.discard(element)

例如:

skills = {'Problem solving', 'Software design', 'Python programming'}

skills.discard('Java')

print(skills)

输出:

{'Problem solving', 'Python programming', 'Software design'}

从集合中取出元素

要从集合中移除并返回一个元素,你可以使用 pop() 方法。

由于集合中的元素没有特定的顺序 pop() 方法会从集合中移除一个未指定的元素。

如果你多次执行以下代码,每次它都会显示一个不同的值:

skills = {'Problem solving', 'Software design', 'Python programming'}

skill = skills.pop()

print(skill)

输出:

Problem solving

清空集合

要从一个集合中移除所有元素,你可以使用 clear() 方法:

set.clear()

例如:

skills = {'Problem solving', 'Software design', 'Python programming'}

skills.clear()

print(skills)

输出:

set()

不可变集合

要使一个集合变为不可变的,你可以使用名为 frozenset() 的内置函数frozenset() 函数会根据一个现有的集合返回一个新的不可变集合。例如:

skills = {'Problem solving', 'Software design', 'Python programming'}

skills = frozenset(skills)

在那之后,如果你试图修改该集合的元素,你将会得到一个错误。

skills = {'Problem solving', 'Software design', 'Python programming'}

skills = frozenset(skills)\

skills.add('Django')

输出:

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

遍历集合元素

由于集合是可迭代的,你可以使用 for 循环来遍历它的元素。例如:

skills = {'Problem solving', 'Software design', 'Python programming'}

for skill in skills:

    print(skill)

输出:

Software design

Python programming

Problem solving

要在循环内部访问当前元素的索引,你可以使用内置的 enumerate() 函数:

skills = {'Problem solving', 'Software design', 'Python programming'}

for index, skill in enumerate(skills):

    print(f"{index}.{skill}")

输出:

0.Software design

1.Python programming

2.Problem solving

默认情况下,索引从 0 开始。要更改这一点,你可以将起始值作为参数传递给 enumerate() 函数的第二个参数。例如:

skills = {'Problem solving', 'Software design', 'Python programming'}

for index, skill in enumerate(skills, 1):

    print(f"{index}.{skill}")

输出:

1.Python programming

2.Problem solving

3.Software design

请注意,每次运行这段代码时,你得到的集合元素顺序都会不同。

总结

  • 集合是由不可变元素组成的无序集合。


Comment