您的位置:首页 > 编程语言 > Python开发

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

2015-05-22 23:04 281 查看

列表推导

通过列表推导可直接生成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
>>>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: