【Python基础】推导式

本文详细介绍了Python中的列表推导式、字典推导式和集合推导式,通过实际例子展示了如何快速创建、过滤和转换序列数据。包括提取符合条件的元素、生成整数倍数、创建矩阵转置、字典键值反转、生成随机字典等内容。
摘要由CSDN通过智能技术生成

Python 推导式

对序列或可迭代对象中的每个元素应用某种操作,用生成的结果创建新的列表

或用满足特定条件的元素创建子序列。

1 列表推导式

1.1 基本格式

[表达式 for 变量 in 可迭代对象][表达式 for 变量 in 可迭代对象 if 条件]

等价于

# 定义一个空列表
列表名 = []
for 变量 in 可迭代对象:
    if 条件:
        列表名.append(表达式)

1.2 参考实例

1.2.1 从列表中提取首字母小于c的元素,并以全体大写的形式存储在另一个列表中

elements = ['Omega', 'mu', 'alpha', 'beta', 'pi', 'sigma']
temp = [element.upper() for element in elements if element[0] < 'c']
print(temp)

''' 运行结果
['OMEGA', 'ALPHA', 'BETA']
'''

等价于:

elements = ['Omega', 'mu', 'alpha', 'beta', 'pi', 'sigma']
temp = []
for element in elements:
    if element[0] < 'c':
        temp.append(element.upper())
print(temp)

''' 运行结果
['OMEGA', 'ALPHA', 'BETA']
'''

1.2.2 计算1-30内可以被3整除的整数

mylist = [i for i in range(1, 31) if i % 3 == 0]
print(mylist)

''' 运行结果
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30]
'''

等价于

mylist = []
for i in range(1, 31):
    if i%3 == 0:
        mylist.append(i)
print(mylist)

''' 运行结果
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30]
'''

1.2.3 创建列表[(0,1),(1,2),(2,3),(3,4),(4,5),(5,6)]

res = [(i, i+1) for i in range(0, 6)]
print(res)

''' 运行结果
[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]
'''

等价于

res = []
for i in range(0, 6):
    res.append((i, i + 1))
print(res)

''' 运行结果
[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]
'''

等价于

res = list(map(lambda x: (x, x+1), range(0, 6)))
print(res)

''' 运行结果
[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]
'''

1.2.4 应用列表推导式,去除列表中成绩小于80的字典

dict_list = [{"科目": "高等数学", "成绩": 96},
             {"科目": "大学物理", "成绩": 90},
             {"科目": "线性代数", "成绩": 91},
             {"科目": "大学英语", "成绩": 75},
             {"科目": "分析化学", "成绩": 81},
             {"科目": "有机化学", "成绩": 76}]
res = [d for d in dict_list if d["成绩"] >= 80]
print(res)

''' 运行结果
[{'科目': '高等数学', '成绩': 96},
 {'科目': '大学物理', '成绩': 90},
 {'科目': '线性代数', '成绩': 91},
 {'科目': '分析化学', '成绩': 81}]
'''

1.3 嵌套的列表推导式

1.3.1 转置矩阵

matrix = [
    [1, 2, 3, 4],
    [4, 5, 6, 7],
    [7, 8, 9, 10]]
matrix_ = [[row[i] for row in matrix] for i in range(4)]
print('转置前的矩阵:')
print(matrix)
print('转置后的矩阵:')
print(matrix_)

''' 运行结果
转置前的矩阵:
[[1, 2, 3, 4], [4, 5, 6, 7], [7, 8, 9, 10]]
转置后的矩阵:
[[1, 4, 7], [2, 5, 8], [3, 6, 9], [4, 7, 10]]
'''

等价于

matrix = [
    [1, 2, 3, 4],
    [4, 5, 6, 7],
    [7, 8, 9, 10]]
matrix_ = []
for i in range(4):
    matrix_.append([row[i] for row in matrix])
print('转置前的矩阵:')
print(matrix)
print('转置后的矩阵:')
print(matrix_)

''' 运行结果
转置前的矩阵:
[[1, 2, 3, 4], [4, 5, 6, 7], [7, 8, 9, 10]]
转置后的矩阵:
[[1, 4, 7], [2, 5, 8], [3, 6, 9], [4, 7, 10]]
'''



2 字典推导式

2.1 基本格式

{键表达式:值表达式 for 变量 in 可迭代对象}{键表达式:值表达式 for 变量 in 可迭代对象 if 条件}

2.2 参考实例

2.2.1 通过字典推导式,颠倒字典的键名和值

dict_list = {"科目": "高等数学", "成绩": 96}
res = {v:k for k,v in dict_list.items()}
print(res)

''' 运行结果
{'高等数学': '科目', 96: '成绩'}
'''

2.2.2 使用字符串及其长度创建字典

mylist = ['MySQL', 'Python', 'C++', 'Java', 'HTML', 'CSS']
mydict = {k: len(k) for k in mylist}
print(mydict)

''' 运行结果
{'MySQL': 5, 'Python': 6, 'C++': 3, 'Java': 4, 'HTML': 4, 'CSS': 3}
'''

2.2.3 生成一个包含5个随机数的字典

import random
res = {k: random.randint(10, 100) for k in range(1, 7)}
print(res)

''' 运行结果
{1: 39, 2: 60, 3: 40, 4: 44, 5: 42, 6: 96}
'''

2.2.4 将两个长度相同的列表合并成字典

course = ['Python', 'MySQL', 'Java', 'Javascript', 'HTML']
score = [99, 89, 80, 60, 60]
course_score = {k: v for k, v in zip(course, score)}
print(course_score)

''' 运行结果
{'Python': 99, 'MySQL': 89, 'Java': 80, 'Javascript': 60, 'HTML': 60}
'''



3 集合推导式

3.1 基本格式

{表达式 for 项目 in 可迭代对象}{表达式 for 项目 in 可迭代对象 if 条件}

3.2 参考实例

3.2.1 提取是Python的字母并存储

res = {v for v in 'pdyftaahdofgng' if v in 'python'}
print(res)

''' 运行结果
{'o', 'y', 'h', 't', 'p', 'n'}
'''

3.2.2 获取字符串的长度,并去重

course = ['Python', 'MySQL', 'Java', 'Javascript', 'HTML']
res = {len(item) for item in course}
print(res)

''' 运行结果
{10, 4, 5, 6}
'''

3.2.3 计算数字3,4,5的立方数

res = {v**3 for v in range(3, 6)}
print(res)

''' 运行结果
{64, 27, 125}
'''



4 元组推导式

4.1 基本格式

元组推导式返回生成器对象
可以使用函数tuple()直接将生成器对象转换成元组

(表达式 for 项目 in 可迭代对象)(表达式 for 项目 in 可迭代对象 if 条件)

4.2 参考实例

4.2.1 计算数字3,4,5的立方数

res = (v**3 for v in range(3, 6))
print(tuple(res))

'''
运行结果
(27, 64, 125)
'''
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

维他命C++

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值