Python学习笔记 - 探索集合Set

大家好,我是Mr数据杨,非常高兴和你们一起走进Python的世界。今天,让我们一起探讨Python中神奇的“集合”。你们是否读过《三国演义》?你们应该记得那场赫赫有名的“桃园三结义”吧?那让我们以此为例,来深入理解Python集合的奥秘。

首先,什么是集合?就像桃园中的刘备、关羽、张飞三人一样,集合是一个由不同元素组成的“群体”。这就是“集合的定义”。

而“构建集合的方式”,就像那场三人结义的过程,就像刘备、关羽、张飞的名字被写进了我们的故事中一样,我们也可以通过多种方式,将元素加入到我们的Python集合中。

接下来,我们要注意,集合是“自动排序且元素不可变”的。就好像三人虽然立誓为兄弟,但每个人的身份、性格和能力都是独一无二的,无法改变。同样,无论我们如何添加元素,集合中的元素都会自动排序,并且一旦添加,就不能更改。

然后我们来看“集合的大小和成员资格”。在《三国演义》中,虽然刘备、关羽、张飞三人的结义兄弟只有三个,但他们的影响力远超过这个数字。在Python中,我们可以通过简单的命令来查看集合的大小,也就是元素的数量,以及某个元素是否属于该集合。

最后,让我们来看“集合冻结”。你们是否记得刘备的一句誓言:“同生共死,说者何忍!”呢?就像他们的兄弟之情一样,有时我们也需要将集合“冻结”,使其内容无法更改,以保证数据的安全。

在这个故事中,集合如同三英雄,每个英雄都有自己的特点,就像集合中的每一个元素。希望你们能够在今天的分享中,更深入地理解Python中的集合,享受编程的乐趣!

集合的定义

集合是无序的,并且元素是唯一的,集合本身可以修改,但集合中包含的元素必须是不可变类型。

集合定义

构建集合的方式

使用set()函数可以构建集合,构建的set数据会自动进行去重。

列表方式

x = set(['曹操', '孫権', '劉備', '曹操', '司馬懿'])
x
# 输出: {'司馬懿', '曹操', '孫権', '劉備'}

元组方式

x = set(('曹操', '孫権', '劉備', '曹操', '司馬懿'))
x
# 输出: {'司馬懿', '曹操', '孫権', '劉備'}

字符串方式

s = '董卓'
list(s)
# 输出: ['董', '卓']
set(s)
# 输出: {'董', '卓'}

集合自动排序且元素不可变

集合中的元素是无序的,但在输出时,集合会自动进行排序。另外,集合中的元素必须是不可变类型。

x = {
    
    42, '曹操', (1, 2, 3), 3.14159}
x
# 输出: {42, '曹操', 3.14159, (1, 2, 3)}

注意: 列表和字典类型不能被集合直接包含。

a = [1, 2, 3]
{
    
    a}
# 输出:
# Traceback (most recent call last):
#   File "<stdin

>", line 1, in <module>
# TypeError: unhashable type: 'list'

d = {
    
    'a': 1, 'b': 2}
{
    
    d}
# 输出:
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
# TypeError: unhashable type: 'dict'

集合的大小和成员资格

可以使用方法 len() 获取集合的大小,使用关键字 innot in 来判断一个元素是否属于集合。

x = {
    
    '曹操', '孫権', '劉備'}

len(x)
# 输出: 3

'孫権' in x
# 输出: True

'司馬懿' in x
# 输出: False

集合冻结

被冻结集合是一种不可变且不可操作的集合类型,可以使用frozenset来创建。

x = frozenset(['曹操', '孫権', '劉備'])

x
# 输出: frozenset({'曹操', '劉備', '孫権'})

len(x)
# 输出: 3

x & {
    
    '劉備', '司馬懿', '董卓'}
# 输出: frozenset({'劉備'})

尝试修改被冻结集合的方法将会失败。



x = frozenset(['曹操', '孫権', '劉備'])

x.add('司馬懿')
# 输出: AttributeError: 'frozenset' object has no attribute 'add'

x.pop()
# 输出: AttributeError: 'frozenset' object has no attribute 'pop'

x.clear()
# 输出: AttributeError: 'frozenset' object has no attribute 'clear'

猜你喜欢

转载自blog.csdn.net/qq_20288327/article/details/131024614