我试图使用两个列表,其中包含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:解压缩的值太多
任何帮助?
感谢。
答案 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)
不是答案,但在这种情况下,使用operator
和map
可能是一种更快的方法:
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
对于这么小的问题,这不是最快的。但是可能会赢得大奖。