Python:如何检查列表是不是包含数值并返回布尔值?
Posted
技术标签:
【中文标题】Python:如何检查列表是不是包含数值并返回布尔值?【英文标题】: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,因为它只包含字符串。
【问题讨论】:
试试any 【参考方案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
也避免在答案明确后遍历其余元素以上是关于Python:如何检查列表是不是包含数值并返回布尔值?的主要内容,如果未能解决你的问题,请参考以下文章