将字符串列表附加到函数

时间:2017-03-15 23:13:33

标签: python python-3.x types typeerror

我收到一个我不明白的类型错误。我想用另一个列表中的月份名称编制一个更好/更差的平均月份列表来标记它们。这还是一个非常新的,所以我打赌有一种非常直观的方式来做到这一点,我还不知道。 评论是包含的类型:

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

4 个答案:

答案 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