在Python 3中,我想对两个变量进行For循环,但仅对第一个使用enumerate函数。看起来像这样:
for no, (r, j) in enumerate(all_accepted_results), all_accepted_accuracies:
plt.plot(r, label = 'Forecast #%d - Accuracy %f'%(no + 1, all_accepted_accuracies[j] ))
其中no
是枚举函数中的数字,r
是图表上绘制的列表all_accepted_results
中的实际值,而j
将是是列表all_accepted_accuracies
中的实际值,该列表作为标签添加到图例中。
现在我收到错误:
ValueError: too many values to unpack (expected 2)
我也尝试过:
for no, r, j in enumerate(all_accepted_results), all_accepted_accuracies:
...并收到与上述相同的错误,只有“(预期3)”,并且还尝试过:
for no, (r, j) in enumerate(all_accepted_results, all_accepted_accuracies):
...这让我出错了:
TypeError: 'list' object cannot be interpreted as an integer
所以我不知所措。显然,我只是想从上方绘制r值,并在图例中说明它是哪个预测号及其相应的准确度数。
我将很快去工作,但是如果有人对我有任何想法,我将在这里重新访问。谢谢!
答案 0 :(得分:3)
您可以全部zip
:
for (no, r), j in zip(enumerate(all_accepted_results), all_accepted_accuracies):
请注意,它是(no, r), j
,而不是no, (r, j)
,因为enumerate
会产生类似(no, r)
的元组,不是仅是连续整数{{1 }}。
您的代码:
no
...基本上与此相同:
for ... in enumerate(all_accepted_results), all_accepted_accuracies:
在>>> for a in 1,2,3,4,5:
... print(a)
...
1
2
3
4
5
>>>
之后的部分实际上是一个 tuple ,在您的情况下,它包含两个元素:in
对象和enumerate
,因此您将最终遍历这两个对象。