我正在做练习,其中一个有问题。
我打印了列表中最小和最高的数字。当程序看到字符串时,它必须忽略它。我不知道该怎么做。
def find_hi_lo(list):
return(min(list), max(list))
a = find_hi_lo([10, 2, 3, 4, 6])
print(a)
(2, 10)
a = find_hi_lo([10, 2, 3, 'aaa', 4, 6])
print(a)
给出错误:
TypeError: unorderable types: str() < int()
你可以帮我吗?
您可以先filter
出所有不需要的元素。
from numbers import Number
def find_hi_lo(list0):
temp = list(filter(lambda x: isinstance(x, Number), list0))
return(min(temp), max(temp))
您可以使用列表推导式来过滤掉非数值
def find_hi_lo(data):
data = [i for i in data if isinstance(i, float) or isinstance(i, int)]
return min(data), max(data)
>>> find_hi_lo([10, 2, 3, 'aaa', 4, 6])
(2, 10)
列表可以包含任意类型的值,但当您将它们限制为相同类型的值(或者至少支持使用者期望的任何协议的值(时,它们的效果最佳。在这种情况下,min
和max
都期望值彼此可比。这里最简单的方法是在将列表传递给 find_hi_lo
之前过滤掉字符串。理想情况下,您可以通过首先不将字符串添加到列表中来执行此操作,但您可以根据需要删除它们,如下所示:
find_hi_lo([x for x in [10, 2, 3, 'aaa', 4, 6] if not isinstance(x, str)])