Python列表推导式
列表推导式
列表推导式提供了一个更简洁的创建列表的方法
[生成规则表达式 for 循环变量 in 可迭代对象]
# 生成规则表达式:产生每个列表元素的表达式
# for 循环变量 in 可迭代对象:组织列表元素的产生
步骤
- 搭建循环
- 组织表达式
# eg1
# 过程化
li = []
for i in range(10):
li.append(random.randint(1, 100))
# python风格的扁平化
li = [random.randint(1, 100) for i in range(10)]
# 列表推导式免去了初始化和append运算
创建元组列表
[(x, x**2) for x in range(6)]
# [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)]
循环逻辑部分可以嵌套
vec = [[1, 2, 3 ], [4, 5, 6], [7, 8, 9]]
# 过程化赋值
li = []
for elem in vec:
for num in elem:
li.append(num)
li = [num for elem in vec for num in elem]
# num是循环变量 先外层循环 后内层循环
嵌套列表推导式(创建高维结构)
生成规则表达式可以是列表推导式
# eg:求矩阵转置
matrix = [[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]]
transposed = [[1, 5, 9],
[2, 6, 10],
[3, 7, 11],
[4, 8, 12]]
# 过程化处理
transposed = []
for i in range(4):
transposed.append([row[i] for row in matrix])
# python扁平化处理
transposed = [[row[i] for row in matrix] for i in range(4)]
transposed = list(zip(*matrix))
列表推导式中添加条件语句
- 使用if、else筛选进入列表的元素
- 只有if时,if写在最后
# 获取[0, 4, 16, 36, 64]
squares = [x**2 for x in range(9) if x % 2 == 0]
# 偶数平方、奇数加三
squares = [x**1 if x % 2 == 0 else x + 3 for x in range(9)]
li = [name[0] for name, score in scores.items() if score > 80]
字典推导式
{键值对表达式 for 循环变量 in 可迭代对象}
# eg:一直有两组数据“abcd”,[10,20,30],要求获取{1:("a",10), 2:("b", 20), 3:("c",30)}
{i+1:(a,b) for i,(a,b) in enumerate(zip("abcd", [10,20,30]))}

浙公网安备 33010602011771号