为什么在尝试在列表上迭代时,我会得到'TypeError: 'numpy.int64' object is not iterable'?

2024-09-27 21:23:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图比较一个列表中的两个项,它们在字典中起作用,但它一直转换为数字.int64我不明白为什么。在

我只使用第一个循环和第二个循环测试了“valores”类型。一开始我得到了一份名单,但第二份我得到了数字.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)

我希望输出类似“12”之类的东西


Tags: inimport类型列表forif字典数字
3条回答

对于valoresfor q_passado, q_atual in valores),不需要for循环,因为它是一个由两个元素组成的列表,可以通过表达式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])

你写错了!=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]

输出是:

^{pr2}$

说明:

for k,v in questionario.items()

这将从字典中提取键值对

^{4}$

这会将您在循环中编写的条件捆绑在一起。在

{cda}只满足这些条件。在

最后将这些值包装到列表中:

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

不能将变量分配给列表。相反,请逐个指定变量。在

 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

相关问题 更多 >

    热门问题