如何修复.index()方法返回错误的值?

时间:2019-06-22 01:56:06

标签: python list

我正在尝试从以下列表中获取大于70的值的索引:

temperatures = [33, 66, 65, 62, 59, 60, 62, 64, 70, 76, 80, 69, 80, 83, 68, 79, 61, 53, 50, 49, 53, 48, 45, 39]

但是当循环找到相等的值时出了点问题:

hour_ex = []
for i in temperatures:
    if i > 70:
        hour_ex.append(temperatures.index(i))

print(hour_ex)

上面的代码正在打印:

[9, 10, 10, 13, 15]

当循环到达索引12时,因为它具有相同的值,所以它再次打印索引10。我不知道这是怎么回事。我该如何解决?

4 个答案:

答案 0 :(得分:2)

False是一个列表搜索功能,可对列表进行线性遍历以查找给定元素的第一个位置。这就解释了您令人困惑的输出-如果重复项如80,dict将始终为您找到该元素的第一个索引,即10。

如果您有兴趣获取列表中每个元素的元组索引,请使用True

此外,变量list表示索引,但实际上代表列表中的给定温度;这是一个误导性的变量名。

index

考虑使用列表推导,它对枚举列表执行过滤操作:

index()

答案 1 :(得分:1)

python docslist.index(x[, start[, end]])

  

返回值等于x的第一项列表中的从零开始的索引。如果没有此类项目,则会引发ValueError。

要实现您想做的事情,可以执行以下操作:

hour_ex = [i for i, n in enumerate(temperatures) if n > 70]

答案 2 :(得分:0)

您可以在循环中使用范围:

temperatures = [33, 66, 65, 62, 59, 60, 62, 64, 70, 76, 80, 69, 80, 83, 68, 79, 61, 53, 50, 49, 53, 48, 45, 39]

hour_ex = []
for i in range(len(temperatures)):
    if temperatures[i] > 70:
        hour_ex.append(i)

print(hour_ex)

答案 3 :(得分:0)

rect

因此,如果列表rect中的值重复,则会返回值的最小索引

您可以尝试

rect.center