我正在做练习,其中一个有问题。
我打印的是最小的,列表中的最高数字。当程序看到一个字符串时,它必须忽略它。我不知道怎么做。
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()
你能帮助我吗?
答案 0 :(得分:4)
您可以先filter
清除所有不需要的元素。
from numbers import Number
def find_hi_lo(list0):
temp = list(filter(lambda x: isinstance(x, Number), list0))
return(min(temp), max(temp))
答案 1 :(得分:2)
您可以使用列表推导来过滤掉非数字值
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)
答案 2 :(得分:2)
列表可以包含任意类型的值,但是当它们限制为相同类型的值(或者至少是支持使用者期望的任何协议的值)时,它们最有效。在这种情况下,min
和max
都需要相互比较的值。这里最简单的方法是在将列表传递给find_hi_lo
之前将字符串过滤掉。理想情况下,您可以通过不首先在列表中添加字符串来实现此目的,但您可以按需删除它们,如下所示:
find_hi_lo([x for x in [10, 2, 3, 'aaa', 4, 6] if not isinstance(x, str)])