【问题标题】:Python: How can I check if a list contain a numeric value and return a boolean?Python:如何检查列表是否包含数值并返回布尔值?
【发布时间】:2021-12-14 05:19:56
【问题描述】:

假设我有两个列表

list1 = [1, "x", 3, "y", 5]

list2 = ["x", "y", "x", "y"]

我想要一个函数,它为 list1 返回一个布尔值 True,因为它包含一些整数,而对于 list2,它返回一个布尔值 False,因为它只包含字符串。

【问题讨论】:

标签: python list


【解决方案1】:
def is_not_all_strings(lst):
    return not all(isinstance(k,str) for k in lst)

或者,根据需要:

def contains_an_integer(lst):
    return any(isinstance(k,int) for k in lst)

【讨论】:

  • 如果是关于整数的任何可能会更好。
  • 我认为哪个更有用取决于需要,而不是数据类型。 @infinitezero
  • @Burakhan Aksoy:“为 list1 返回一个布尔值 True,因为它包含一些整数”
【解决方案2】:

如果你想捕获各种数值,而不仅仅是整数,你可以使用numbers.Number,像这样:

import numbers

def has_numbers(items):
    return any(isinstance(item, numbers.Number) for item in items)

这不仅会检测整数,还会检测浮点数、小数、分数等。

【讨论】:

    【解决方案3】:
    def contains_num(l):
        return any(list(map(lambda x:isinstance(x,int),l)))
    

    【讨论】:

    • list 是不必要的,会导致它遍历所有元素而不是停在第一个数字上?
    【解决方案4】:

    使用for 循环。这样一来,您可以在找到一个整数后返回True,并避免遍历其余元素。

    def foo(lst):
        for x in lst:
            if isinstance(x, int):
                return True
        return False
    

    【讨论】:

    • any 也避免在答案明确后遍历其余元素
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 2023-03-28
    • 2018-07-24
    相关资源
    最近更新 更多