繁体   English   中英

Python打印错误:%d格式:需要一个数字,而不是元组

[英]Python print error: %d format: a number is required, not tuple

我尝试打印时遇到意外错误:

import numpy as np
a = np.array([11, 21, 31, 41, 51])
it = np.nditer(a, flags=['multi_index'], op_flags=['readwrite'])

while not it.finished:
    i = it.multi_index
    print("%d %d" % (i, a[i]))
    it.iternext()

此代码生成错误:

TypeError: %d format: a number is required, not tuple

但是,当我这样做时:

for i in xrange(5):
    print("%d %d" % (i, a[i]))

然后我得到了预期的结果:

0 11
1 21
2 31
3 41
4 51

那么为什么我在之前的情况下会出现这个错误呢?

您应该尝试使用新样式格式

print("{} {}".format(i, a[i]))

如果您真的想要索引和元素,可以使用enumerate

for i, x in enumerate(np.nditer(a)):
    print("{} {}".format(i, x))

并且,顾名思义, multi_index不是整数。

https://docs.scipy.org/doc/numpy/reference/arrays.nditer.html

i不是一个号码。

In [69]: it.multi_index
Out[69]: (0,)

请改用i[0]

你正在使用it.multi_index返回一个索引元组。

由于您的数组是1D,请将i=it.multi_index替换为您要提取的索引。

在你的情况下,它应该是i=it.multi_index[0]

i是类型tuple ,使用it.multi_index[0]得到第一个元素,如下所示:

while not it.finished:
    i = it.multi_index[0]
    print("%d %d" % (i, a[i]))  # The better is using "{} {}".format(i, a[i])
    it.iternext()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM