Я хочу получить максимальное значение из списка.Как найти максимальное значение двух чисел в python?
List = ['1.23','1.8.1.1']
print max(List)
Если я печатаю это я получаю 1.8.1.1
вместо 1.23
. Что я делаю неправильно?
Я хочу получить максимальное значение из списка.Как найти максимальное значение двух чисел в python?
List = ['1.23','1.8.1.1']
print max(List)
Если я печатаю это я получаю 1.8.1.1
вместо 1.23
. Что я делаю неправильно?
Это не цифры, они являются строками, и поэтому они сортируются лексикографически. Так как символ 8 появляется после 2, 1.8.1.1
возвращается как максимум.
Один из способов решить эту проблему, чтобы написать свою собственную функцию сравнения, которая принимает каждую часть строки как int
и сравнивает их численно:
def version_compare(a, b):
a_parts = a.split('.')
b_parts = b.split('.')
a_len = len(a_parts)
b_len = len(b_parts)
length = min(a_len, b_len)
# Compare the parts one by one
for i in range(length):
a_int = int(a_parts[i])
b_int = int(b_parts[i])
# And return on the first nonequl part
if a_int != b_int:
return a_int - b_int
# If we got here, the longest list is the "biggest"
return a_len - b_len
print sorted(['1.23','1.8.1.1'], cmp=version_compare, reverse=True)[0]
Зачем вам нужно сортировать? Эта функция с небольшим обновлением может дать максимум – prakharsingh95
Самый простой способ, чтобы использовать сравнение кортежа.
Скажи:
versions = ['1.23','1.8.1.1']
def getVersionTuple(v):
return tuple(map(int, v.strip().split('.')))
Теперь вы можете использовать, print(max(map(getVersionTuple, versions)))
, чтобы получить максимум.
EDIT:
Вы можете использовать '.'.join(map(str, m))
, чтобы получить исходную строку (при m
имеет максимальный кортеж).
с этим выходом (1, 23). Вместо этого он должен дать 1,23 – harika
Аналогичный подход - если эти строки номер версии - это превратить строку версии в список целого:
vsn_list=['1.23', '1.8.1.1']
print sorted([ [int(v) for v in x.split(".")] for x in vsn_list ])
При сравнении строк, они сравниваются символ за символом поэтому любая строка, начиная с ' 2 'будет сортироваться до строки, начинающейся с' 8 ', например.
Как выглядит «1.8.1.1»? И почему это должно быть/не быть ответом? –
Что ты сравниваете? Номера версий? – Wickramaranga
да, они являются номерами verison в MKS (инструмент управления версиями) – harika