python学习笔记(7)-高级特性(三)-列表生成式与生成器

本文介绍Python中列表生成式的使用方法及其简洁强大的特性,并对比生成器的优势,包括节省内存空间和按需生成元素的特点。

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


1. 列表生成式

列表生成式即List Comprehensions,是python内置非常简单却强大的可以用来创建list的生成式。
如:

>>> range(1,11)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

>>> L = []
>>> for i in range(1,11):
...     L.append(i * i)
... 
>>> L
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

用列表生成式便可以一行语句输出上式:

>>> [i * i for i in range(1,11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

写列表生成式时,要把生成的元素  i * i 放在前面,后面跟着for循环,就可以把list创建出来,循环后面还可以继续添加条件。
两层for循环:

>>> [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

打印当前文件夹下所有目录及文件,包括隐藏的。
 [d for d in os.listdir('.')]
['.bash_logout', '.bash_profile', '.bashrc', '.cshrc', '.tcshrc', 'anaconda-ks.cfg', '.cache', '.config', 'perl5', '.bash_history', '.xauthSISijM', '.emacs.d', '.xauthjUi1P2', '.rediscli_history', '.xauthjgRdbk', '.mysql_history', '.viminfo.tmp', '.pki', '.ssh', '.viminfo']

把列表元素换成小写。

>>> L = ['XiaoMing','XiaoFang','XiaoWang']
>>> [l.lower() for l in L]
['xiaoming', 'xiaofang', 'xiaowang']

2.生成器
通过列表生成式,可以创建一个列表,但是受到内存限制,列表的容量是有限的,而且创建一个包含100W个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个需要的元素,那后面绝大多数的元素占用的空间就浪费了。在python中,生成器(Generator)就是这样一种边循环边计算,在循环的过程中不断的推算后面的元素的机制,这样不必创建完整的list,从而节省了大量空间。

>>> L = [x * x for x in range(1,11)]
>>> L
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>>> G = (x * x for x in range(1,11))
>>> G
<generator object <genexpr> at 0x7fe6980bd0f0>
>>> G.next()
1
>>> G.next()
4
>>> G.next()
9
>>> G.next()
16

L 是一个列表,而 G是一个生成器,区别在于 [] 和 ()。

>>> for g in G:
...     print g
... 
25
36
49
64
81
100


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值