问题描述
我正在尝试从以下列表中获取大于70的值的索引:
I'm trying to get the index of the values higher than 70 from the following list:
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]
但是当循环找到相等的值时出了点问题:
But something is going wrong when the loop finds equal values:
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.我不知道这是怎么回事.我该如何解决?
When the loop reach the index 12, it prints again the index 10 because it has the same value. I don't know what's going on. How can I fix it?
推荐答案
index
是一个列表搜索功能,可对列表进行线性遍历以查找给定元素的第一个位置.这就解释了您令人困惑的输出-如果重复项如80,则 index()
将始终为您找到该元素的第一个索引,即10.
index
is a list-searching function that performs a linear walk through the list to find the first position of a given element. This explains your confusing output--in the case of duplicates like 80, index()
will always give you the first index it can find for that element, which is 10.
如果您有兴趣获取列表中每个元素的元组索引,请使用 enumerate()
.
Use enumerate()
if you're interested in obtaining the indices as a tuple for each element of the list.
此外,变量 i
表示索引,但实际上表示列表中的给定温度;这是一个误导性的变量名.
Additionally, the variable i
suggests index, but actually represents a given temperature in the list; it's a misleading variable name.
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, temperature in enumerate(temperatures):
if temperature > 70:
hour_ex.append(i)
print(hour_ex) # => [9, 10, 12, 13, 15]
请考虑使用列表理解功能,该功能对枚举列表执行过滤操作:
Consider using a list comprehension, which performs a filtering operation on the enumerated list:
hour_ex = [i for i, temp in enumerate(temperatures) if temp > 70]
这篇关于如何修复.index()方法返回错误的值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!