在列表中查找最大值及其索引-不断获取错误的索引

时间:2019-05-22 16:00:43

标签: python list

我不确定为什么我得到的输出错误。

我的代码:

costList = ['$3.38', '$3.25', '$6.00', '$3.50', '$1.50', '$558.45',
            '$0.50', '$9.50', '$0.48', '$0.85', '$0.65', '$0.26', '$1.65', '$3.50']
max_value_index = costList.index(max(costList))
print(max_value_index)

输出:

7

所需\正确的输出:

5

4 个答案:

答案 0 :(得分:1)

这是使用内置max函数和key来过滤$并在订购前转换为float的一种方法:

mx = max(costList, key=lambda x: float(x.lstrip('$')))
# '$558.45'

对于索引:

costList.index(mx)
 # 5

答案 1 :(得分:1)

列表中的值是字符串。您需要将它们转换为浮点数

cost_list=[float(entry[1:]) for entry in cost_list]

这将删除美元符号并使所有数字变为数字,然后max函数将按预期工作

答案 2 :(得分:0)

问题在于每个元素都是一个字符串。向前移动第二个元素(切片1:),然后将其转换为float:

float_list=[float(x[1:]) for x in cost_list]

现在,max(float_list)将按预期工作。

您可以使用index()函数找到其索引:

index(max(float_list))

答案 3 :(得分:0)

Max当前将您的值排序为strings,因此为了找到最大值,我们需要将它们转换为float。仅使用max()即可做到这一点。

costList = ['$3.38', '$3.25', '$6.00', '$3.50', '$1.50', '$558.45',
            '$0.50', '$9.50', '$0.48', '$0.85', '$0.65', '$0.26', '$1.65', '$3.50']

max_value_index = max(range(len(costList)), key=lambda x: float(costList[x][1:]))
print(max_value_index) # -> 5