在两个列表之间划分条款

时间:2014-06-30 03:01:21

标签: python list division

我试图使用两个列表,其中包含2000个数字。 我想将第一个列表中的每个术语与第二个列表中的相应术语分开,并将该分区保存在新列表中

例如:

    first = [1,2,3 ...]
    second = [4,5,6 ...]

    prob = [i/a for i,a in first,second]

我希望结果如下:

    prob = [1/4,2/5,3/6 ...]

但是当我这样做时,我得到错误ValueError:解压缩的值太多

任何帮助?

感谢。

2 个答案:

答案 0 :(得分:2)

您必须使用zip

prob = [i/a for i,a in zip(first,second)]

此外,除非您有python3.x,否则除法(/)运算符将执行整数除法。因此,如果您想要浮点值并使用python2.x,则应将其中一个值转换为float,如下所示:

prob = [float(i)/a for i,a in zip(first,second)]

答案 1 :(得分:0)

不是答案,但在这种情况下,使用operatormap可能是一种更快的方法:

In [16]:

from __future__ import division
import operator
In [17]:

first = [1,2,3]
second = [4,5,6]
map(operator.truediv, first, second)
Out[17]:
[0.25, 0.4, 0.5]
In [18]:

%timeit [float(i)/a for i,a in zip(first,second)]
100000 loops, best of 3: 6.08 µs per loop
In [19]:

%timeit map(operator.truediv, first, second)
100000 loops, best of 3: 3.34 µs per loop

numpy还提供了另一种简洁的方法。

In [20]:

import numpy as np
arrf=np.array(first)
arrs=np.array(second)
arrf/arrs
Out[20]:
array([ 0.25,  0.4 ,  0.5 ])
In [21]:

%timeit arrf/arrs
100000 loops, best of 3: 5.07 µs per loop

对于这么小的问题,这不是最快的。但是可能会赢得大奖。