博客
关于我
Python进阶语法:列表推导式
阅读量:804 次
发布时间:2023-03-05

本文共 2354 字,大约阅读时间需要 7 分钟。

列表推导式的详细解析

列表推导式(List Comprehensions)是Python编程语言中的一个强大工具,能够在代码中以简洁的方式处理数据转换和过滤任务。以下是关于列表推导式的详细介绍和实践指南。

1. 列表推导式的基本概念

列表推导式是一种Python特有的语法结构,用于从一个数据序列构建另一个新的数据序列。它结合了循环和条件判断的功能,能够在代码中简化数据处理流程。列表推导式的语法格式如下:

[表达式 for 迭代变量 in 可迭代对象 [if 条件表达式]]
  • 迭代变量:用于遍历可迭代对象(如列表、元组等)的元素。
  • 表达式:根据迭代变量执行的操作,生成新的元素。
  • 条件表达式(可选):用于过滤不符合要求的元素。

2. 列表推导式的使用实例

2.1 数据转换

优化简单循环:

考虑一个示例:从一个列表中提取所有整数,并将其平方。传统的方法需要使用for循环和条件判断,而列表推导式可以大大简化代码。

a = [1, 2, 3, 'a', 'b', 'c']
b = [i**2 for i in a if isinstance(i, int)]
print(b) # 输出:[1, 4, 9]

优化两层循环:

生成两个列表中对应索引相同的元素对,可以使用双重列表推导式:

a = [1, 2, 3, 4, 5, 6, 7]
b = [1, 2, 3, 4, 7, 7, 7]
c = [(x, y) for x in a for y in b if x == y]
print(c) # 输出:[(1, 1), (2, 2), (3, 3), (4, 4), (7, 7), (7, 7), (7, 7)]

矩阵按列读取:

从一个二维列表中按列读取数据,可以通过嵌套列表推导式实现:

vec = [[1,2,3], [4,5,6], [7,8,9]]
y = [j for i in vec for j in i]
print(y) # 输出:[1, 2, 3, 4, 5, 6, 7, 8, 9]

实现嵌套列表的平铺:

将一个二维列表展开成一维列表:

vec = [[1,2,3], [4,5,6], [7,8,9]]
y = [j for i in vec for j in i]
print(y) # 输出:[1, 2, 3, 4, 5, 6, 7, 8, 9]
2.2 数据过滤

过滤不符合条件的元素:

从一个列表中筛选出符合条件的元素:

my_list = [1, 2, 3]
new_list = [item for item in my_list if item > 1]
print(new_list) # 输出:[2, 3]

生成100以内的素数:

使用试除法生成素数列表:

import numpy as np
a = [x for x in range(2, 101) if 0 not in [x%i for i in range(2, int(np.sqrt(x)))]]
print(a) # 输出:[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

3. 列表推导式的高级用法

嵌套列表推导式:

生成三维列表:

nn_list = [(x, y, z, m) for x in range(3) for y in range(3) for z in range(3) for m in range(3)]
print(nn_list) # 输出:[...]

条件过滤在嵌套结构中:

在嵌套列表推导式中添加条件过滤:

nn_list = [(x, y, z, m) for x in range(3) for y in range(3) for z in range(3) for m in range(3) if x > 1 and y > 1]
print(nn_list) # 输出:[...]

4. 性能优化

比较列表推导式和for循环的性能:

import time
def demo1():
new_list = []
for i in range(10000000):
new_list.append(i * 2)
def demo2():
new_list = [i * 2 for i in range(10000000)]
s_time1 = time.perf_counter()
demo1()
e_time1 = time.perf_counter()
print('demo1运行时间:', e_time1 - s_time1)
s_time2 = time.perf_counter()
demo2()
e_time2 = time.perf_counter()
print('demo2运行时间:', e_time2 - s_time2)

结果显示:列表推导式在处理大量数据时效率更高。

5. 注意事项

  • 代码可读性:在列表推导式中嵌套过多条件可能会影响代码的可读性,建议在必要时使用条件表达式。
  • 性能优化:对于大数据量,列表推导式通常比传统的for循环更高效,但具体情况需根据实际测试判断。
  • 避免复杂嵌套:虽然列表推导式支持多层嵌套,但过度使用可能导致代码难以理解和维护。

通过实践和不断探索,熟悉列表推导式的语法和使用场景,可以显著提升Python代码的效率和可读性。在实际项目中,合理运用列表推导式能够简化代码结构,提高开发效率。

转载地址:http://waafk.baihongyu.com/

你可能感兴趣的文章
Python For循环多次返回
查看>>
python frame_python3 selenium自动化 frame表单嵌套的切换方法
查看>>
Python ftplib - 指定端口
查看>>
Python furl库:一键搞定复杂URL操作
查看>>
Python GC 也会关闭文件吗?
查看>>
python gen_key.py 报错 提示找不到OpenSSL lib
查看>>
python getattrribute_Python学习——面向对象高级之反射
查看>>
Python进阶语法:字典推导式
查看>>
python gil_Python中GIL的使用详解
查看>>
python glob.glob使用
查看>>
python glob的安装和使用
查看>>
Python google drive API 下载,文件在哪里?
查看>>
Python GPS 模块:读取最新的 GPS 数据
查看>>
python grpc入门
查看>>
python gRPC测试helloworld
查看>>
python gRPC简单示例
查看>>
Python GUI 开发:全面指南
查看>>
Python GUI编程
查看>>
Python hashlib模块
查看>>
python hashlib模块
查看>>