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