Python语法实践之初探列表推导与生成器

列表推导



通过列表推导可直接生成list

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




内建函数enumerate在循环中使用序列提供了更加便利的获得索引的方式。

>>> seq = ["one","two","three"]
>>> def _treatment(pos,element):
...     return '%d: %s' %(pos,element)
...
>>> [_treatment(i,el) for i,el in enumerate(seq)]
['0: one', '1: two', '2: three']
>>>


也可以使用多层循环

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


列出主目录下的全部文件

>>> import os
>>> [d for d in os.listdir('.')]
['.android', '.bash_history', '.bash_profile', '.CFUserTextEncoding', '.config', '.DS_Store', '.gitconfig', '.idlerc', '.oh-my-zsh', '.ssh', '.subversion', '.Trash', '.vim', '.viminfo', '.wireshark', '.wireshark-etc', '.zcompdump-\xe7\x8e\x8b\xe9\x9c\x84\xe7\x9a\x84MacBook Air-5.0.5', '.zsh-update', '.zsh_history', '.zshrc', '.zshrc-e', 'Applications', 'Desktop', 'Documents', 'Downloads', 'ez_setup.py', 'Library', 'Movies', 'Music', 'Pictures', 'Public']
>>>



生成器


列表推导的[ ] 改()结果则为一个生成器

>>> g = (x * x for x in range(10))
>>> g
<generator object <genexpr> at 0x100b4dd70>
>>> g.next()
0
>>> g.next()
1
>>> g.next()
4
>>> g.next()
9
>>> g.next()
16
>>> g.next()
25
>>>

>>> [i for i in g]
[36, 49, 64, 81]
>>>



通过yield可以暂停一个函数并返回中间结果

>>> def fi():
...     a,b = 0,1
...     while True:
...             yield b
...             a,b = b,a+b
...
>>> value = fi()
>>> value.next()
1
>>> value.next()
1
>>> value.next()
2
>>> value.next()
3
>>>






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值