【发布时间】:2021-12-14 05:19:56
【问题描述】:
假设我有两个列表
list1 = [1, "x", 3, "y", 5]
list2 = ["x", "y", "x", "y"]
我想要一个函数,它为 list1 返回一个布尔值 True,因为它包含一些整数,而对于 list2,它返回一个布尔值 False,因为它只包含字符串。
【问题讨论】:
-
试试any
假设我有两个列表
list1 = [1, "x", 3, "y", 5]
list2 = ["x", "y", "x", "y"]
我想要一个函数,它为 list1 返回一个布尔值 True,因为它包含一些整数,而对于 list2,它返回一个布尔值 False,因为它只包含字符串。
【问题讨论】:
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)
【讨论】:
如果你想捕获各种数值,而不仅仅是整数,你可以使用numbers.Number,像这样:
import numbers
def has_numbers(items):
return any(isinstance(item, numbers.Number) for item in items)
这不仅会检测整数,还会检测浮点数、小数、分数等。
【讨论】:
def contains_num(l):
return any(list(map(lambda x:isinstance(x,int),l)))
【讨论】:
list 是不必要的,会导致它遍历所有元素而不是停在第一个数字上?
使用for 循环。这样一来,您可以在找到一个整数后返回True,并避免遍历其余元素。
def foo(lst):
for x in lst:
if isinstance(x, int):
return True
return False
【讨论】:
any 也避免在答案明确后遍历其余元素