从列表中查找包含str和int python的最大int值

时间:2018-04-26 08:11:50

标签: python string list max combinations

希望从合并列表中找到max,如下所示:

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

我试过以下:

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

返回TypeError: '>' not supported between instances of 'int' and 'str'。任何建议都会有所帮助。我想要的是从上面列表中找到max整数值。

5 个答案:

答案 0 :(得分:5)

使用list comprehensionisinstance一起提取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

答案 1 :(得分:2)

如果你的真实数据也有交替的字符串和整数,就像你的例子一样,你可以从第二个元素开始迭代大小为2的步骤:

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

请注意,此切片会创建一个新列表(因此,根据原始列表的大小,它可能非常大)。

答案 2 :(得分:1)

max()期望使用可比较的值进行迭代。您应该先从列表中忽略字符串,然后在其上使用max()

使用list comprehension仅考虑整数值

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)])

答案 3 :(得分:1)

相同的 isinstance 构思可以应用于过滤器:

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

此外,如果您需要在比较中包含多种数据类型, 例如:浮动,您可以简单地使用元组来验证要比较的数据:

max(filter(lambda i: isinstance(i, (int, float)), f))

答案 4 :(得分:1)

您也可以使用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