Python推导式详解:字典、列表、集合及条件嵌套用法

沈亦白
沈亦白
发布时间:2026-10-15| 4人浏览过
原创

本文系统讲解Python中的推导式(Comprehensions)用法,涵盖列表、字典和集合三种类型。通过具体代码示例,展示如何利用推导式简化代码结构,并深入解析含if条件的过滤推导式以及多层for循环嵌套的推导式写法,帮助开发者高效编写Pythonic代码。

字典推导式允许我们在一行代码中快速构建字典对象,常用于合并两个等长列表或从现有字典中提取满足特定条件的数据。例如,可以通过 {i: i ** 2 for i in range(1, 5)} 生成键为数字、值为该数字平方的字典。当合并两个列表时,如 list1 = ['name', 'age', 'gender'] 与 list2 = ['zmz', '20', 'boy'],使用 {list1[i]: list2[i] for i in range(len(list1))} 可生成对应键值对;若列表长度不一致,推导式将自动截取较短列表的长度。此外,字典推导式也可用于过滤,如 {key: value for key, value in dict3.items() if value > 6000} 仅保留值大于6000的条目。

list1 = ['name', 'age', 'gender']
list2 = ['zmz', '20', 'boy']
# 字典推导式 -- 快速合并列表为字典,或提取字典中的目标数据
# 例 1 -- key是数字,value是这个数字的平方
dict1 = {i: i ** 2 for i in range(1, 5)}
print(dict1)
# 例 2 -- 合并两个列表,两个列表长度相同
dict2 = {list1[i]: list2[i]for i in range(len(list1))}
print(dict2)
# 如果两个列表长度不同,那么取 len(长度较短的列表)
# 例 3 -- 提取字典中满足条件的数据
dict3 = {'Mac': 10000, 'Dell': 6599, 'HP': 6999, 'Lenovo': 5799, 'Acer': 4599}
print(dict3.items())
counts = {key: value for key, value in dict3.items() if value > 6000}
print(counts)

列表推导式是化简代码的强大工具,旨在替代传统的循环赋值方式。传统方法可能需要使用 while 循环或 for 循环配合 append() 方法,如将 0 到 9 或 10 到 19 的数字存入列表。使用推导式,只需 [i for i in range(-9, 2, 1)] 即可直接生成列表。这种语法不仅简洁,还能直接嵌入表达式中,例如 sum([2 ** i for i in range(100)]) 可计算2的0到99次方之和,体现了推导式在数据处理中的高效性。

"""
推导式(生成式) -- 是用来化简代码
推导式包含:
1.列表推导式
2.字典推导式
3.集合推导式
"""
# 用一个表达式创建一个有规律的列表或控制一个有规律的列表
list1 = []
# while实现
i = 0
while i < 10:
    list1.append(i)
    i += 1
print(list1)
# for 实现
list2 = []
for i in range(10, 20, 1):
    list2.append(i)
print(list2)
# 推导式实现
list3 = [i for i in range(-9, 2, 1)]  # for 的左侧的 i 是返回值,创建列表当然用 []
print(list3)

print(sum([2 ** i for i in range(100)]))

集合推导式主要用于从现有列表或元组中创建去重后的集合。例如,给定 list1 = [2, 3, 4, 2, 5, 3],通过 {i ** 2 for i in list1} 可生成包含平方值的集合,自动去除重复元素。需要注意的是,若对元组使用类似推导式的语法如 (i * 2 for i in t1),这实际上生成的是生成器对象而非集合,直接打印会显示生成器地址而非内容,需转换为列表或集合才能查看具体数值。

# 集合推导式 -- 主要用来根据列表创建集合
list1 = [2, 3, 4, 2, 5, 3]
set1 = {i ** 2 for i in list1}
print(set1)
t1 = (10, 20, 30, 40, 50)
print(t1)
t2 = (i * 2 for i in t1)
print(t2)  # 打印不出来

含 if 条件的推导式用于在生成数据时进行过滤。传统方法可能需要先初始化空列表,再通过 for 循环判断条件后 append()。使用推导式,如 [i for i in range(11) if i % 2 == 0],可直接生成 0 到 10 之间的偶数列表。这种写法将判断逻辑直接嵌入推导式末尾,比传统循环更简洁易读,且执行效率通常更高,是处理筛选场景的首选方式。

"""
创建0 - 10 的偶数列表
"""
# 方法一
list1 = [i for i in range(0, 11, 2)]
print(list1)
# 方法二
list2 = []
for i in range(11):
    if i % 2 == 0:
        list2.append(i)
print(list2)
# 方法三
list3 = [i for i in range(11) if i % 2 == 0]  # 列表推导式其实就是根据for 循环化简得来的
print(list3)

含 for 循环的推导式用于处理多层嵌套逻辑。传统方法可能需要双重 for 循环配合 append() 生成元组列表。使用推导式,如 [(i, j) for i in range(5) for j in range(5)],可直接生成所有可能的 (i, j) 组合。这种写法将嵌套循环扁平化,代码结构更紧凑。需要注意的是,推导式中的多个 for 子句顺序应与传统嵌套循环一致,外层循环在前,内层循环在后,以确保生成数据的顺序符合预期。

list = []
for i in range(1, 3):
    for j in range(3):
        list.append((i, j))
print(list)
print("==================")
list1 = [(i, j) for i in range(5) for j in range(5)]  # for循环嵌套
count = 0
for i in list1:
    count += 1
    print(i, end='')
    if count % 5 == 0:
        print()

推导式是Python中提升代码简洁性和可读性的核心特性之一。通过掌握列表、字典、集合推导式,以及含 if 过滤和多层 for 嵌套的写法,开发者可以大幅减少样板代码,使数据处理逻辑更加直观。在实际开发中,合理运用推导式不仅能提高编码效率,还能增强代码的可维护性。

本文简要介绍了Python推导式的基本用法与进阶技巧,希望能为您的编程实践提供有益参考。如需了解更多Python相关内容,欢迎持续关注本站更新。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。