python列表压缩_如何在Python中压缩两个列表列表?

另一方面,我给出的替代解决方案已被证明是垃圾! strike>

但是,最快的解决方案(目前)似乎是在没有zip()的情况下使用列表理解的解决方案。

[me@home]$ SETUP="L1=[[x,x+1] for x in xrange(10000)];L2=[[x+2,x+3] for x in xrange(10000)]"

[me@home]$ # this raises IndexError if len(L1) > len(L2)

[me@home]$ python -m timeit "$SETUP" "[x + L2[i] for i, x in enumerate(L1)]"

100 loops, best of 3: 10.6 msec per loop

[me@home]$ # same as above, but deals with length inconsistencies

[me@home]$ python -m timeit "$SETUP" "Lx,Ly=((L2,L1),(L1,L2))[len(L1)<=len(L2)];[x + Ly[i] for i, x in enumerate(Lx)]"

100 loops, best of 3: 10.6 msec per loop

[me@home]$ # almost as fast as above, but easier to read

[me@home]$ python -m timeit "$SETUP" "[L1[i] + L2[i] for i in xrange(min(len(L1),len(L2)))]"

100 loops, best of 3: 10.8 msec per loop

[me@home]$ python -m timeit "$SETUP" "L3=[x + y for x,y in zip(L1,L2)]"

100 loops, best of 3: 13.4 msec per loop

[me@home]$ python -m timeit "$SETUP" "L3=map(list.__add__, L1, L2)"

100 loops, best of 3: 13.5 msec per loop

[me@home]$ python -m timeit "$SETUP" "L3=[sum(x,[]) for x in zip(L1,L2)]"

100 loops, best of 3: 18.1 msec per loop

[me@home]$ python -m timeit "$SETUP;import itertools" "L3=[list(itertools.chain(*x)) for x in zip(L1,L2)]"

10 loops, best of 3: 32.9 msec per loop@Zac's suggestion非常快,但我们在这里比较苹果和橙子,因为它在L1上就地进行了列表扩展,而不是创建第三个列表。因此,如果不再需要L1,这是一个很好的解决方案。

[me@home]$ python -m timeit "$SETUP" "for index, x in enumerate(L1): x.extend(L2[index])"

100 loops, best of 3: 9.46 msec per loop但是,如果必须保持L1不变,那么一旦包含深度复制,性能就会低于标准。

[me@home]$ python -m timeit "$SETUP;from copy import deepcopy" "L3=deepcopy(L1)

> for index, x in enumerate(L1): x.extend(L2[index])"

10 loops, best of 3: 116 msec per loop

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值