Python2 float对象不可迭代

时间:2017-03-28 04:45:16

标签: python python-2.7

以下是我要做的事情:

if len(targets) == 0:
   avg = frozenset([tuple(.123/(nodes_num - 1))])
   for t in range(nodes_num):
       if t == node:
          continue
       node_p = (avg,t)
       node_weig.append(node_p)

我不知道我做错了什么,但它说avg = fro...浮动对象不可迭代

2 个答案:

答案 0 :(得分:1)

这是您的问题:tuple(.123/(nodes_num - 1))

tuple构造函数采用iterable并从其生成的值中生成tuple。显然,.123/(nodes_num - 1)float,无法进行迭代。如果要创建此值的一个元素tuple,请使用:(.123/(nodes_num - 1),)(注意:创建一个元素tuple需要尾随逗号,否则parens只是对操作,而不是将其包裹在tuple)。

因此得到的行将是:

avg = frozenset([(.123/(nodes_num - 1),)])

这将使len 1 frozenset包含len 1 tuple,其中包含计算出的float值。如果目标只是该值的frozenset,则根本不需要tuple包装,并且可以简化为:

avg = frozenset([.123/(nodes_num - 1)])

现在,无论是对你的场景做任何有意义的事情我都不知道,但它是你错误的根源。

答案 1 :(得分:0)

来自doc:

tuple([iterable])

  

返回一个元组,其项目与之相同且顺序相同   iterable的项目。 iterable 可能是一个序列,一个容器   支持迭代,或迭代器对象。如果iterable已经是a   元组,它没有变化。

.123/(nodes_num - 1)是一个浮点数,这就是你收到错误的原因:

TypeError: 'float' object is not iterable

如果我不误解你的意思,你可以尝试使用

tuple([.123 / (nodes_num - 1)])使其可迭代。