列表解析python_python列表解析

本文详细介绍了Python中的列表解析,包括基础用法、添加条件判断、与`map()`和`filter()`函数的对比。示例展示了如何通过列表解析创建序列、筛选元素以及生成矩阵。同时提到了`filter()`返回的是生成器,需要通过迭代获取值,而`map()`则可以直接转换为列表。列表解析在效率上优于`map()`。文章还提供了更多关于列表解析的参考资料链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

列表解析,主要用于动态创建列表

本篇主要说一下,lambda、map()、和filter()同列表解析语句之间结合的用法

列表解析的基本语法为:[expr for iter_var in iterable]

这个语句的核心是for循环,他迭代iterable对象的所有条目。前面的expr应用于序列的每个成员,最后的结果值是表达式产生的列表。

1. 基础使用

来一段示例吧

在idle中进行测试:

>>> [i for i in range(0,8)]

[0,1,2,3,4,5,6,7]

其中 i 即是基本语法中的expr也是iter_val;再换一种方式,我们对里面的值进行一下运算让所有的成员乘以2

>>> [i*2 for i in range(0,8)]

[0, 2, 4, 6, 8, 10, 12, 14]

这就是完全按照基本语法写的一个列表解析

2. 再循环语句后面添加判断条件

扩展版本语法:[expr for iter_val in iterable if cond_expr]

我们还可以进行拓展,在他的后面再添加一些语句,对列表进行筛选;比如我们只要这个数值中可以被2整除的数

>>> [i for i in range(1,8) if i%2 == 0]

[ 2, 4, 6]

这种语句类似于使用filter,所以我们同样可以采用python内置的filter函数实现,以达到获取相同的值

>>> l = filter(lambda x:x%2==0, range(1,8))

>>> for i in l:

i

2

4

6

但是发现没有,有一些不一样,因为我并没有直接打印出列表。为什么呢?因为filter的返回值是一个生成器(generator),生成器是

无法知道所有的值的,只能通过迭代的方式获取下一个值

3. map用于达到跟列表解析相同的结果

>>> map(lambda x: x*2, range(1,8))

[2, 4, 6, 8, 10, 12, 14]

使用它可以获得 [x * 2 for x in range(1,8)]一样的效果,但是使用后者回比map()更高效

4. 生成矩阵

当你需要得到一个3行5列的矩阵的时候,很简单:

>>> [(x,y) for x in range(0,3) for y in range(0,5)]

[(0, 0), (0, 1), (0, 2), (0, 3), (0, 4),

(1, 0), (1, 1), (1, 2), (1, 3), (1, 4),

(2, 0), (2, 1), (2, 2), (2, 3), (2, 4)]

大家也可以在PEP 202找到更多的参考列表解析的资料

以上就是python 列表解析的详细内容,更多请关注Gxl网其它相关文章!

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值