python中的Zip无法与列表

时间:2017-07-31 06:09:01

标签: python python-2.7 list numpy zip

以下是我的尝试:

>>> d
array([ 0.71428573,  0.69230771,  0.69999999], dtype=float32)
>>> f
[('name', 999), ('ddd', 33), ('mm', 112)]
>>> for n1,s1,normal in zip(d,f):
...     print(n1,s1,normal)
...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: need more than 2 values to unpack

然后我尝试了这个:

>>> for (name,confidence),normal in zip(d,f):
...     print(name,confidence,normal)
...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'numpy.float32' object is not iterable

其中,

d = ['Jonathan Walsh','Patrick Walsh','John Welsh']
array = np.array(d)
from pyxdameraulevenshtein import damerau_levenshtein_distance_ndarray, normalized_damerau_levenshtein_distance_ndarray
 d = normalized_damerau_levenshtein_distance_ndarray('jwalsh', array)

请告诉我,我需要做些什么来同时打印这些值?我在Windows 10上使用Python2.7.13。

3 个答案:

答案 0 :(得分:8)

f是一个嵌套列表,因此要将其项目解压缩到您需要执行的各个变量:

>>> for n1, (s1, normal) in zip(d, f):
...     print(n1, s1, normal)
...
(0.71428573, 'name', 999)
(0.69230771, 'ddd', 33)
(0.69999999, 'mm', 112)

这基本上相当于:

>>> a, (b, c) = [1, (2, 3)]
>>> a, b, c
(1, 2, 3)

虽然这会失败,因为a可以分配给1但现在只有bc只有一个项目而且Python抱怨它需要一个RHS列表中的更多项目或我们在LHS上使用相同的结构。

>>> a, b, c = [1, (2, 3)]
Traceback (most recent call last):
  File "<ipython-input-9-c8a9ecc8f325>", line 1, in <module>
    a, b, c = [1, (2, 3)]
ValueError: need more than 2 values to unpack

来自docs:

  

如果目标列表是以逗号分隔的目标列表:对象   必须是具有与目标相同数量的项目的可迭代项   在目标列表中,项目从左到右分配到   相应的目标。

答案 1 :(得分:3)

zip()不会改变它正在运行的数据的结构,它只是依次将序列中的每个元素放在一起。

for f, (s, i) in zip(d, f):
   ...

答案 2 :(得分:1)

您可以尝试列表理解

[[c, a] for c, a in zip(d,f)]

结果

[[0.71428573, ('name', 999)], [0.69230771, ('ddd', 33)], [0.69999999, ('mm', 112)]]