摘要:在 Python 中,集合推导式(Set Comprehension) 是一种简洁的语法,用于从可迭代对象中快速生成集合。它与列表推导式类似,但返回的是集合(set),具有元素唯一性与无序性的特点。
在 Python 中,集合推导式(Set Comprehension) 是一种简洁的语法,用于从可迭代对象中快速生成集合。它与列表推导式类似,但返回的是集合(set),具有元素唯一性与无序性的特点。
一、什么是集合推导式?
集合推导式可以在一行表达式中实现:遍历 → 处理 → 构造集合。
基本语法:
{表达式 for 变量 in 可迭代对象 if 条件}for 后面的部分:指定迭代的数据源,并可添加条件筛选。
for 前面的部分:对每个元素进行映射或处理。
返回的结果是一个 set 集合。
示例:平方数集合(去重)
squares = {x**2 for x in range(-3, 4)}print(squares) # {0, 1, 4, 9} #如 -3 与 3、-2 与 2 的平方重复,被自动去掉语法比较:
( x for x in range(5) ) # 生成器表达式,使用 [ x for x in range(5) ] # 列表推导式,使用 { x for x in range(5) } # 集合推导式,使用 {}{ x: x**2 for x in range(5) } # 字典推导式,含冒号 :二、带条件的集合推导式
集合推导式中可以使用 if 条件来筛选元素,或使用三元表达式进行条件赋值。
1、条件筛选
示例:提取字符串中所有小写字母
text = "mediaTEA!"letters = {c for c in text if c.islower}print(letters) # {'d', 'e', 'a', 'm', 'i'}2、条件赋值(三元表达式)
示例:奇偶标签集合
labels = {"even" if x % 2 == 0 else "odd" for x in range(5)}print(labels) # {"even", "odd"}提示:
使用条件赋值时,若映射结果重复,集合会自动合并。
三、嵌套循环的集合推导式
和列表推导式类似,集合推导式也支持嵌套循环,常用于生成组合或笛卡尔积。
示例:生成二维坐标点集合
points = {(x, y) for x in range(2) for y in range(3)}print(points)# {(0, 1), (1, 1), (0, 0), (1, 2), (0, 2), (1, 0)}说明:结果是一个集合,包含所有 (x, y) 的组合,顺序不固定。
四、集合推导式应用场景
1、快速去重
words = ["apple", "banana", "apple", "pear", "banana"]unique_words = {w for w in words}print(unique_words) # {"apple", "banana", "pear"}2、从字符串中提取唯一字符
text = "hello world"letters = {ch for ch in text if ch.isalpha}print(letters) # {'h', 'd', 'l', 'e', 'r', 'w', 'o'}3、基于条件的集合构建
nums = {x for x in range(20) if x % 3 == 0}print(nums) # {0, 3, 6, 9, 12, 15, 18}五、补充说明
1、集合元素必须可哈希。
集合元素必须是不可变类型,例如数值、字符串、元组等。
列表、字典等不可哈希对象不能作为集合元素。
2、集合无序,因此打印结果的顺序可能不同。若需保留顺序,应使用 dict.fromkeys 或有序容器。
小结
集合推导式提供了一种简洁方式来生成集合,支持条件筛选与嵌套循环。它常用于去重、提取唯一元素和过滤数据,是 Pythonic 风格代码的重要工具。
“点赞有美意,赞赏是鼓励”
来源:晴朗教育