如何跳过/忽略字符串列表元素



我正在做练习,其中一个有问题。

我打印了列表中最小和最高的数字。当程序看到字符串时,它必须忽略它。我不知道该怎么做。

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)

列表可以包含任意类型的值,但当您将它们限制为相同类型的值(或者至少支持使用者期望的任何协议的值(时,它们的效果最佳。在这种情况下,minmax都期望值彼此可比。这里最简单的方法是在将列表传递给 find_hi_lo 之前过滤掉字符串。理想情况下,您可以通过首先不将字符串添加到列表中来执行此操作,但您可以根据需要删除它们,如下所示:

find_hi_lo([x for x in [10, 2, 3, 'aaa', 4, 6] if not isinstance(x, str)])

最新更新