Найти максимальное значение и его индекс в списке - Продолжайте получать неправильный индекс - PullRequest
0 голосов
/ 22 мая 2019

Я не уверен, почему я получаю неправильный вывод.

Мой код:

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 ]

1 голос
/ 22 мая 2019

Значения в списке являются строками.Вам нужно преобразовать их в число с плавающей точкой

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

. Это приведет к тому, что знак доллара будет сброшен, и все станет числовым, а затем функция max будет работать, как и ожидалось

1 голос
/ 22 мая 2019

Вот один из способов использования встроенной функции max с key для фильтрации $ и приведения к float до заказа:

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

А для индекса:

costList.index(mx)
 # 5
0 голосов
/ 22 мая 2019

Макс в настоящее время сортирует ваши значения как 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
0 голосов
/ 22 мая 2019

Проблема в том, что каждый элемент является строкой. Возьмите второй элемент (slice 1:) вперед и преобразуйте его в число с плавающей точкой следующим образом:

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

Теперь max(float_list) будет работать как положено.

Вы можете найти его индекс, используя функцию index():

index(max(float_list))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...