Python推导式详解:字典、列表、集合及条件嵌套用法
本文系统讲解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相关内容,欢迎持续关注本站更新。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













