尝试遍历列表时,为什么会出现“ TypeError:'numpy.int64'对象不可迭代”的情况?

时间:2019-06-06 23:54:14

标签: python python-3.x

我正在尝试比较列表中的2个项目,这些项目可以用作字典中的值,但是它一直在转换为numpy.int64,我不明白为什么。

我仅使用第一个循环和第二个循环测试了“ valores”类型。在第一个中,我得到一个列表,但是在第二个中,我得到numpy.int64。

import pandas as pd 
import pprint
.
.
.
questionario = {'a': [1, 2], 'b': [3, 4], 'c': [5, 6]}

for variavel, valores in questionario.items():
  for q_passado, q_atual in valores:
    if q_passado and q_atual != 0:
      if q_atual / q_passado > 0.5:
        print(variavel, q_passado, q_atual)

我希望输出为“ a 1 2”之类的东西,

3 个答案:

答案 0 :(得分:0)

编写!= 0条件时,您犯了一个错误。您需要将这些条件分开,否则运算符优先级会弄乱逻辑。

您可以使用理解将其缩减为一行:

questionario = {'a': [1, 2], 'b': [3, 4], 'c': [5, 6], 'd' :[1, 0], 'e': [14,6]}

output = ["{} {} {}".format(k, v[0], v[1]) for k,v in questionario.items() if v[0] != 0 and v[1] != 0 and v[1]/v[0] > 0.5]

输出为:

['a 1 2', 'c 5 6', 'b 3 4']

说明:

for k,v in questionario.items()

这将从字典中提取键值对

if v[0] != 0 and v[1] != 0 and v[1]/v[0] > 0.5

这捆绑了您在循环中编写的条件。

结果,k,v将仅包含满足这些条件的值。

最后,这会将值添加到字符串中并将它们包装在列表中:

"{} {} {}".format(k, v[0], v[1])

答案 1 :(得分:0)

您不能将变量分配给列表。而是一一分配变量。

 OLD: for q_passado, q_atual in valores:
 NEW: q_passado, q_atual = valores[0], valores[1]

 Result:
     a 1 2
     b 3 4
     c 5 6

答案 2 :(得分:0)

valoresfor q_passado, q_atual in valores)不需要for循环,因为它是2个元素的列表,可由表达式valores[0]valores[1]访问。您只需将其更改为:

import pandas as pd 
import pprint
questionario = {'a': [1, 2], 'b': [3, 4], 'c': [5, 6]}

for variavel, valores in questionario.items():
    if valores[0] and valores[1]!= 0:
        if valores[1] / valores[0] > 0.5:
            print(variavel, valores[0], valores[1])