以下是我的尝试:
>>> 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。
答案 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
但现在只有b
和c
只有一个项目而且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)]]