Python集合用什么括号定义

清欢
清欢
发布时间:2026-10-29 | 8人浏览过
原创

深入解答Python集合用什么括号定义:详解非空集合的花括号语法、空集合为何不能使用空花括号而必须用set()函数,以及集合、字典、列表、元组四类容器的括号使用对比与实践注意事项。

在 Python 中,直接使用字面量定义集合时,使用的是花括号(也称大括号,即 {})。但这里存在一个初学者极容易踩入的语法陷阱:不能用一对空花括号 {} 来定义空集合,因为空花括号在 Python 中已经被字典(dict)占用;如果要创建一个空的集合,必须使用内置函数 set()。理解集合的括号用法,不仅是掌握一组标点符号,更是理清集合(Set)与字典(Dict)、列表(List)、元组(Tuple)在语法设计与底层结构上的本质差异。

一、非空集合字面量:使用花括号 {}

定义包含元素的非空集合时,只需将各个元素用逗号隔开,并置于一对花括号 {} 之间。例如需要声明一个包含质数的集合,可以直接书写:

# 使用花括号直接定义集合
primes = {2, 3, 5, 7, 11}
print(primes)        # 示例输出: {2, 3, 5, 7, 11}
print(type(primes))  # 示例输出: <class 'set'>

集合具有两个核心数学特性:唯一性(去重)与无序性。如果在花括号中写入了重复的元素,Python 解释器在语法解析和构建哈希表的过程中,会自动舍弃重复项,仅保留单一的键值:

# 包含重复元素的字面量定义
fruits = {"apple", "banana", "apple", "orange", "banana"}
print(fruits)  # 示例输出: {'banana', 'orange', 'apple'}
Python集合用什么括号定义
图 1:Python 花括号非空集合字面量的解析与元素去重过程

二、关键陷阱:空花括号 {} 定义的是字典,而非集合

很多刚从其他语言转向 Python,或者初学数据结构的开发者容易凭直觉推导:“既然非空集合用 {1, 2},那么空集合理所当然是 {}”。这种直觉在 Python 中是错误的。

在 Python 的发展历程中,字典(dict)是很早便确立的核心内置类型,早在 Python 1.x 时代就已经占据了 {} 字面量。而集合类型(set)最初以第三方模块 sets 形式存在,直到 Python 2.4 才作为内置类型引入,并在 Python 2.7 / 3.0 中获得了 {1, 2} 这样的花括号语法糖。为了保持向后兼容性,Python 规定:一对完全没有内容的空花括号 {} 始终属于空字典。

# 验证空花括号的真实类型
empty_container = {}
print(type(empty_container))  # 示例输出: <class 'dict'>

# 正确创建空集合的唯一方式
real_empty_set = set()
print(type(real_empty_set))   # 示例输出: <class 'set'>
重要注意事项:如果需要初始化一个空集合并在后续循环中调用 .add() 添加元素,必须使用 s = set()。若写成 s = {},随后调用 s.add(...) 将直接抛出 AttributeError: 'dict' object has no attribute 'add' 运行时异常。
Python集合用什么括号定义
图 2:针对空容器与非空容器的定义语法判断流程

三、Python 四大基础容器的括号类型对比

在 Python 中,不同的括号字符承担着明确的语法语义。为了在日常编码中不发生混淆,可以通过下表清晰对比四大内置容器类型:

容器类型 对应中文名称 使用的括号类型 典型声明示例 有序性与可变性
Set 集合 花括号 {}(非空) / set() {1, 2, 3} 无序 / 整体可变(元素不可变)
Dict 字典 花括号 {}(含键值对) {"a": 1, "b": 2} 按插入有序 / 可变
List 列表 方括号(中括号) [] [1, 2, 3] 有序 / 可变
Tuple 元组 圆括号(小括号) () (1, 2, 3) 有序 / 不可变

从表格中可以看出,花括号 {} 同时被集合(Set)与字典(Dict)所共享。Python 解释器在编译代码时,依据花括号内部是否存在冒号 : 来区分二者:

  • 花括号内包含 key: value 键值映射结构:识别为 dict。
  • 花括号内仅包含由逗号分隔的独立元素:识别为 set。
  • 花括号内完全为空:默认识别为 dict。
Python集合用什么括号定义
图 3:Python 内置集合、字典、列表与元组所用括号形态与特征对照

四、花括号在集合推导式中的运用

除了静态字面量声明,花括号还用于构建集合推导式(Set Comprehension)。与列表推导式使用 [] 类似,集合推导式将表达式和循环语句直接包在 {} 内,能够在一行代码中实现筛选、映射与自动去重:

# 集合推导式示例:提取单词中所有唯一的字母并转为小写
word = "Antigravity"
letters = {char.lower() for char in word if char.isalpha()}
print(letters)  
# 示例输出: {'v', 'y', 'i', 't', 'g', 'r', 'n', 'a'}

# 集合推导式自动去重整数平方
numbers = [-2, -1, 0, 1, 2]
squared_set = {x ** 2 for x in numbers}
print(squared_set)  
# 示例输出: {0, 1, 4}

在编写推导式时,区分集合推导式与字典推导式的规则与字面量一致:若 for 循环左侧是 k: v 结构,得到的是字典;若仅为单一表达式 expr,则自动生成集合。

五、集合元素的限制条件:必须是可哈希(不可变)对象

在花括号中定义集合时,还需要注意元素的类型限制。集合底层基于哈希表实现,每个元素都必须具备固定且不可变的哈希值。因此:

  • 允许放入的类型:整数(int)、浮点数(float)、字符串(str)、元组(tuple)、布尔值(bool)以及冻结集合(frozenset)。
  • 禁止放入的类型:列表(list)、字典(dict)、集合(set)等可变对象。
# 正确:元组是不可变类型,可作为集合元素
valid_set = {(1, 2), (3, 4)}

# 错误:列表是可变类型,不可作为集合元素
# invalid_set = {[1, 2], [3, 4]}
# 运行时报错: TypeError: unhashable type: 'list'
Python集合用什么括号定义
图 4:Python 集合三种声明与构建方式的综合概览

六、总结

回答“Python集合用什么括号定义”这一问题,答案可以清晰地归纳为以下两条准则:

  1. 非空集合:使用花括号 {}(大括号)直接定义,元素间用逗号隔开,例如 s = {1, 2, 3};同时花括号也支持集合推导式 {x for x in seq}。
  2. 空集合:必须调用内置函数 set() 定义,绝对不能使用 {},因为空花括号在 Python 中专用于表示空字典。

只要区分清楚花括号中有无冒号(区分字典与集合),以及牢记空集合的函数定义方式,就能在日常 Python 编程中准确无误地使用集合。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表