In [23]: {i:el for i,el in enumerate(["one","two","three"])}
Out[23]: {0: 'one', 1: 'two', 2: 'three'}
enumerate是内建函数,可以让列表获得“下标”的属性。
而如果不用列表推导式,上例需要这么写
In [24]: lst = ["one","two","three"]
In [25]: i = 0
In [26]: for e in lst:
....: lst = '%d: %s' % (i,lst)
....: i +=1
....:
In [27]: lst
Out[27]: ['0: one', '1: two', '2: three']
In [29]: import sys
In [30]: i = iter(range(10000))
In [32]: id(i.__next__())
Out[32]: 4388723488
In [33]: sys.getsizeof(i)
Out[33]: 48
In [34]: sys.getsizeof(i.__next__())
Out[34]: 28
In [35]: e = range(10000)
In [37]: sys.getsizeof(e)
Out[37]: 48
In [38]: sys.getsizeof(list(e))
Out[38]: 90112
可以看到,如果一次性把list全部加载进来,需要90112byte内存空间,如果使用迭代器迭代,仅仅需要28byte内存空间。