我收到一个我不明白的类型错误。我想用另一个列表中的月份名称编制一个更好/更差的平均月份列表来标记它们。这还是一个非常新的,所以我打赌有一种非常直观的方式来做到这一点,我还不知道。 评论是包含的类型:
good= [] #---- float
bad= [] #---- float
goodmonths = [] #---- string (month names)
badmonths = [] #---string
for i in net: #----float
if i > average: #---also float
good.append(i)
goodmonths.append(months[i])
elif i < average:
bad.append(i)
badmonths.append(months[i])
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-136-362a333d8546> in <module>()
6 if i > average:
7 good.append(i)
----> 8 goodmonths.append(months[i])
9 elif i < average:
10 bad.append(i)
TypeError: list indices must be integers or slices, not float
我想收到这样的输出:
Good months:
Jan: 1292.23
Feb: 1738.09
etc... ditto for badmonths
答案 0 :(得分:0)
看起来你正在尝试使用浮点变量(i)集成你的循环,它们需要是直的整数。
答案 1 :(得分:0)
问题是months[i]
因为索引不能是float类型(例如第4.5项是什么?)所以你必须将它转换为整数。实现此目标的最简单方法应该是将months[i]
替换为months[int(i)]
答案 2 :(得分:0)
我认为您尝试以两种不兼容的方式使用一个变量:因为列表索引和都是相应的值。试试这个:
for mon in range(12): #----float
i = net[mon]
if i > average: #---also float
good.append(i)
goodmonths.append(months[mon])
elif i < average:
bad.append(i)
badmonths.append(months[mon])
mon 是列表索引; i 是 net 的值。您应该将这些更改为desscriptive variable names。
答案 3 :(得分:0)
您似乎正在使用net
中需要使用索引的值来获取months
数组中的相应元素。循环时使用enumerate()
获取索引和值:
for i, val in enumerate(net):
if val > average:
good.append(val)
goodmonths.append(months[i])
else:
bad.append(val)
badmonths.append(months[i])
顺便说一下,您的代码完全忽略了值与平均值完全相等的情况。 >
的反面是<=
,而不是<
。但如果只有两种情况,请使用else
而不是elif
。