Python列表推导式

列表推导式

列表推导式提供了一个更简洁的创建列表的方法

[生成规则表达式 for 循环变量 in 可迭代对象]
# 生成规则表达式:产生每个列表元素的表达式
# for 循环变量 in 可迭代对象:组织列表元素的产生

步骤

  1. 搭建循环
  2. 组织表达式
# 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]))}
posted @ 2023-11-08 22:31  某科学的撒把豆子  阅读(41)  评论(0)    收藏  举报