Python 为什么在迭代列表时会出现类型错误:float

Python 为什么在迭代列表时会出现类型错误:float,python,Python,所以我在这里解决了我的一个小小的尴尬错误: 现在我有了另一个 我检索数据的方法: def retrieveSpeeds(databasepath, someid): con = lite.connect(databasepath) with con: cur = con.execute("SELECT speed FROM speeds WHERE id = someid") speeds = [x[0] for x in cur]

所以我在这里解决了我的一个小小的尴尬错误:

现在我有了另一个

我检索数据的方法:

def retrieveSpeeds(databasepath, someid):
     con = lite.connect(databasepath)
     with con:
        cur = con.execute("SELECT speed FROM speeds WHERE id = someid")
        speeds = [x[0] for x in cur]
        for i in range(0, len(speed)):
            newspeeds.append(float(speed[i]))
     return speeds
因此,回报看起来像:

[14.0, 14.5, 14.5, 14.5, 14.5, 13.8]
我主要是:

maxspeeds = []
for id in userid:
    speed = retrieveSpeeds(databasepath, id)
    if len(speed)>0:
           maxspeeds.append(max(speed))
for i in range(0,len(maxspeeds)):
    if maxspeeds[i] > 40:
          maxspeeds = maxspeeds.pop(i)
现在我的新问题是:

    Traceback (most recent call last):
    if maxspeeds[i]>40:
    TypeError: 'float' object has no attribute '__getitem__'
为什么它突然认为我的列表是一个浮动对象?我犯了更多错误?

您正在将maxspeeds分配给maxspeeds.popi的输出,该输出返回一个数字,该数字是弹出项的索引。相反,不要为输出分配任何内容:

maxspeeds = []
for id in userid:
    speed = retrieveSpeeds(databasepath, id)
    if len(speed)>0:
           maxspeeds.append(max(speed))
for i in range(0,len(maxspeeds)):
    if maxspeeds[i] > 40:
          maxspeeds.pop(i) #Here
返回已删除项目的索引,因此当您将列表分配给该输出时,列表将成为整数索引。

您将maxspeeds分配给maxspeeds.popi的输出,该输出返回一个数字,该数字是弹出项目的索引。相反,不要为输出分配任何内容:

maxspeeds = []
for id in userid:
    speed = retrieveSpeeds(databasepath, id)
    if len(speed)>0:
           maxspeeds.append(max(speed))
for i in range(0,len(maxspeeds)):
    if maxspeeds[i] > 40:
          maxspeeds.pop(i) #Here
返回已删除项目的索引,因此当您将列表分配给该输出时,列表将成为整数索引。

此行:

maxspeeds = maxspeeds.pop(i)
将maxspeeds重新绑定到表达式maxspeeds.popi的值,该表达式是一个浮点值。

此行:

maxspeeds = maxspeeds.pop(i)

将maxspeeds重新绑定到表达式maxspeeds.popi的值,这是一个浮点值。

除了正确的答案之外,如果您只是想删除任何超过40的值,那么您可以使用列表理解:maxspeeds=[x代表maxspeeds中的x,如果x<40]除了正确的答案之外,如果您只是试图删除任何超过40的值,那么您可以使用列表理解:maxspeeds=[x代表x,如果x<40,则maxspeeds中的x代表x]