希望从合并列表中找到max
,如下所示:
['filename1', 1696, 'filename2', 5809,....]
我试过以下:
max(['filename1', 1696, 'filename2', 5809,....])
返回TypeError: '>' not supported between instances of 'int' and 'str'
。任何建议都会有所帮助。我想要的是从上面列表中找到max
整数值。
答案 0 :(得分:5)
使用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
答案 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