Найти наибольшую числовую строку из списка - PullRequest
0 голосов
/ 24 мая 2019

У меня есть один список.Я хочу найти максимальное число, но я получил неправильное максимальное число. Я пытаюсь использовать код ниже

list1=['400160', '400161', '400162', '400163', '400164', '400165', '400166', '400167', '400168', '400169', '400170', '400171', '400172', '400173', '400174', '400175', '400176', '400177','99990', '99991', '99992', '99993', '99994', '99995', '99996', '99997', '99998', '99999']
list1.sort() 

#printing the last element 
print("Largest element is:", list1[-1])
#print max(list1)

, как показано ниже: -

print("Largest element is:", list1[-1])
('Largest element is:', '99999') 

, но это неправильно.как найти максимальное число

Ответы [ 6 ]

4 голосов
/ 24 мая 2019

Использование аргумента key для max - еще один разумный подход.

max(list1, key=int)
# '400177'

Обратите внимание, что вам НЕ нужно предварительно сортировать list1, так как максимальное значение никогда не должно быть хуже, чем O (N) сложность в худшем случае.

Причина вашего текущего вывода в том, что вы вызываете list.sort в списке строк.sort будет сравнивать строки лексикографически по умолчанию, а '9'> '4'.

2 голосов
/ 24 мая 2019

Следует использовать map и max.Вот так:

list1=['400160', '400161', '400162', '400163', '400164', '400165', '400166', '400167', '400168', '400169', '400170', '400171', '400172', '400173', '400174', '400175', '400176', '400177','99990', '99991', '99992', '99993', '99994', '99995', '99996', '99997', '99998', '99999']
print(max(map(int, list1)))

Вывод:

>>>python3 test.py 
400177
2 голосов
/ 24 мая 2019

Прямо сейчас вы сравниваете список строк, и сортировка происходит лексикографически, и если вы сортируете таким образом, '99999' является максимальным лексикографически

Следовательно, вам нужно преобразовать список строк всначала список чисел, затем используйте встроенную команду max , чтобы найти максимум.

Сортировка списка, чтобы найти максимум, возможно, является излишним.
Сортировка + поиск максимального значения будет O(n*logn)в то время как просто найти максимум составляет O(n)

In [40]: list1=['400160', '400161', '400162', '400163', '400164', '400165', '400166', '400167', '400168', '400169', '400170', '400171', '400172', '400173', '400174', '400175', '400
    ...: 176', '400177','99990', '99991', '99992', '99993', '99994', '99995', '99996', '99997', '99998', '99999']                                                                   

In [41]: list1 = list(map(int,list1))                                                                                                                                               

In [43]: max(list1)                                                                                                                                                                 
Out[43]: 400177
2 голосов
/ 24 мая 2019

Преобразуйте strings в int и найдите max:

max(map(int, list1))

400177
1 голос
/ 24 мая 2019

печать «Самый большой элемент:», max (map (int, list1))

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

Это должно сделать это:

max(map(int, list1))

Вы должны сначала преобразовать свои предметы из str в int.Я сделал это здесь с map(int, list1), который применяется int() к каждому элементу в list1.

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