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

时间:2018-01-16 20:05:13

标签: python list

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

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

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

你能帮助我吗?

3 个答案:

答案 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)

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

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