Найти максимальное значение int из списка, который содержит как str, так и int python - PullRequest
0 голосов
/ 26 апреля 2018

Глядя, чтобы найти max из списка комбайнов следующим образом:

['filename1', 1696, 'filename2', 5809,....]

Я пробовал следующее:

max(['filename1', 1696, 'filename2', 5809,....])

, которые возвращают мне TypeError: '>' not supported between instances of 'int' and 'str'.Любое предложение поможет.Я хочу найти целочисленное значение max из списка выше.

Ответы [ 5 ]

0 голосов
/ 26 апреля 2018

Вы также можете использовать try...except предложение.

lst = ['filename1', 1696, 'filename2', 5809]
numbers = []

for item in lst:
    try:
        numbers.append(int(item))
    except ValueError:
        pass # Ignore items which are not numbers

print(max(numbers))
# 5809
0 голосов
/ 26 апреля 2018

Если ваши реальные данные также имеют чередующиеся строки и целые числа, как, например, в вашем примере, вы можете просто выполнить итерации с шагом 2 размера, начиная со второго элемента:

values = ['filename1', 1696, 'filename2', 5809, ...]
max(values[1::2])
# 5809

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

0 голосов
/ 26 апреля 2018

max() ожидает повторяемость с сопоставимыми значениями. Сначала вы должны игнорировать строку из списка, а затем использовать max().

Использовать понимание списка, чтобы рассматривать только целочисленные значения

file_data = ['filename1', 1696, 'filename2', 5809,....]
max([elem for elem in file_data if isinstance(elem, int)])

Если вы также ожидаете значения с плавающей запятой, вы можете обновить его как:

max([elem for elem in file_data if not isinstance(elem, str)])
0 голосов
/ 26 апреля 2018

То же самое isinstance идея может быть применена к фильтру:

f = ['filename1', 1696, 'filename2', 5809]
max(filter(lambda i: isinstance(i, int), f))

Кроме того, если вам нужно включить в сравнение более одного типа данных, например: с плавающей точкой , вы можете просто использовать кортеж для проверки данных для сравнения:

max(filter(lambda i: isinstance(i, (int, float)), f))
0 голосов
/ 26 апреля 2018

Используйте list comprehension с isinstance для извлечения int, а затем используйте max.

Пример:

f = ['filename1', 1696, 'filename2', 5809]
print(max([i for i in f if isinstance(i, int)]))
#or generator
print(max((i for i in f if isinstance(i, int))))    #Better Option

Выход:

5809
5809
...