【问题标题】:append list of strings to a new list in function将字符串列表附加到函数中的新列表
【发布时间】:2017-08-06 22:36:40
【问题描述】:

我收到一个我不理解的类型错误。我想用另一个列表中的月份名称来编制一个比平均月份更好/更差的列表来标记它们。对此仍然很新,所以我敢打赌,有一种我还不知道的非常直观的方法来做到这一点。 注释是(将要)包含的类型:

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

【问题讨论】:

  • months[1292.23] 应该是什么?你为什么要把它附加到goodmonths?
  • net的值是多少?
  • 这个想法是从现有列表(网络)中获取值并将其添加到新列表中(好)。因为 net[] 中的每个值都对应一个月,所以我还希望将前一个列表中的月份(即索引)存储在某个地方,这就是 goodmonths 列表的想法。

标签: python python-3.x types typeerror


【解决方案1】:

看起来您正在尝试使用浮点变量 (i) 来集成循环,它们需要是直整数。

【讨论】:

    【解决方案2】:

    问题是months[i] 作为索引不能是浮点类型(例如,第 4.5 项是什么?)所以您必须将其转换为整数。实现这一点的最简单方法应该是将months[i] 替换为months[int(i)]

    【讨论】:

      【解决方案3】:

      我认为您正在尝试以两种不兼容的方式使用一个变量:作为列表索引 和 的相应值。试试这个:

      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 的值。您应该将这些更改为描述性变量名称。

      【讨论】:

        【解决方案4】:

        看起来您正在使用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])
        

        顺便说一句,您的代码完全忽略了值完全等于平均值​​的情况。 &gt; 的反义词是 &lt;=,而不是 &lt;。但如果只有两种情况,请使用else 而不是elif。

        【讨论】:

          猜你喜欢
          • 2018-09-13
          • 2012-12-05
          • 2012-09-14
          • 1970-01-01
          • 1970-01-01
          • 2022-12-06
          • 1970-01-01
          • 2022-12-15
          • 2020-06-20
          相关资源
          最近更新 更多