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

来源:互联网 发布:遗传算法理解 编辑:程序博客网 时间:2024/05/21 22:45

列表推导



通过列表推导可直接生成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>>>






0 0
原创粉丝点击