python3 列表推导式 vs map 差别
(针对python3,因为python3的map返回的是一个map对象,属于生成器)
速度:
如果map里面是用的lambda,那么map速度会比列表推导式要慢,正常情况map速度稍微快那么一点点。
使用lambda
因为map返回的是生成器,所以map对于大容量的操作,不会导致内存爆掉。
而列表推导式则会爆内存,不过也有解决方案,就是使用()替代【】,这时返回的是生成器推导式
如果换成map就不会有问题
或者
原创文章,转载请注明:
http://30daydo.com/article/378
速度:
如果map里面是用的lambda,那么map速度会比列表推导式要慢,正常情况map速度稍微快那么一点点。
$ python -mtimeit -s'xs=range(10)' 'map(hex, xs)'可以看到map稍微快一些
100000 loops, best of 3: 4.86 usec per loop
$ python -mtimeit -s'xs=range(10)' '[hex(x) for x in xs]'
100000 loops, best of 3: 5.58 usec per loop
使用lambda
$ python -mtimeit -s'xs=range(10)' 'map(lambda x: x+2, xs)'列表推导式稍微快些。
100000 loops, best of 3: 4.24 usec per loop
$ python -mtimeit -s'xs=range(10)' '[x+2 for x in xs]'
100000 loops, best of 3: 2.32 usec per loop
因为map返回的是生成器,所以map对于大容量的操作,不会导致内存爆掉。
而列表推导式则会爆内存,不过也有解决方案,就是使用()替代【】,这时返回的是生成器推导式
>>> [str(n) for n in range(10**100)]
谨慎运行上面的,你电脑会卡到爆如果换成map就不会有问题
>>> map(str, range(10**100))
<map object at 0x2201d50>
或者
>>> (str(n) for n in range(10**100))也不会有问题。
<generator object <genexpr> at 0xacbdef>
原创文章,转载请注明:
http://30daydo.com/article/378