尊敬的各位,我是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()
获取集合的大小,使用关键字 in
和 not 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'