Python 函数仅检查1个列表条目
编辑:Python 函数仅检查1个列表条目,python,list,Python,List,编辑: filter_list([1, 2, 3]) = True filter_list([0, 2, 3]) = False filter_list([1, 50, 3]) = True (which should be False) filter_list([1.1, 2, 3]) = False (which should be True) 这将导致[6],我不想这样做。您过早返回false,因为您总是从第一次迭代返回。此外,您的类型检查和将引发大多数任意输入的错误。改用。此外,Pyt
filter_list([1, 2, 3]) = True
filter_list([0, 2, 3]) = False
filter_list([1, 50, 3]) = True (which should be False)
filter_list([1.1, 2, 3]) = False (which should be True)
这将导致[6],我不想这样做。您过早返回false,因为您总是从第一次迭代返回。此外,您的类型检查和将引发大多数任意输入的错误。改用。此外,Python允许。你能做到
def filter_list(elements):
data = [elements]
for a in elements:
if a == int(a) and a >= 1 and a < 50:
filter = []
filter.append(a)
return filter
filter_list([2, 1, 4, 5, 6])
要编译新的匹配值列表,请执行以下操作:
def filter_list(elements):
return any(isinstance(a, (int, float)) and 1 <= a < 50 for a in elements)
或更短,使用:
由于函数的名称,我将建议另一种方法:使用 基本上,您必须实现一个函数,在单个项上返回布尔值。然后,使用reduce将此函数应用于列表中的每个元素
def filter_list(elements):
return [a for a in elements if isinstance(a, int) and 1 <= a < 50]
应用于您的问题,您应该确保筛选列表的大小与原始列表相同,或者修改oracle函数以执行相反的操作,并确保结果为空
print filter(f, [0,1,2])
[1, 2]
此外,True和False是类型化字符串,而您希望它们是布尔值。因此是真是假。在循环的第一次迭代期间,您将始终从函数返回:而不迭代列表的其余部分。你知道为什么吗?在检查了第一个元素之后从循环返回,还会发生什么?对于神秘的部分:int1.1或float1.1导致1,它不等于1.1。所以这不是一个检查a是整数还是浮点数?如果这是目的的话,那么我现在不是返回,而是创建一个名为filter的空列表。我在它后面加了一个字母。现在,只有列表数据中的最后一个数字被附加到它。那不是我想要的。我将编辑这个问题。应该是return True或return False-而不是return False,在Python中应该是True
def filter_list(elements):
# instantiate the new list before the loop
fil = [] # do not shadow the built-in filter function
for a in elements:
if isinstance(a, int) and 1 <= a < 50:
fil.append(a)
return fil
def filter_list(elements):
return [a for a in elements if isinstance(a, int) and 1 <= a < 50]
f = lambda x : 1.0 <= x < 50
# Is equivalent to
def f(item):
return 1.0 <= item < 50
print filter(f, [0,1,2])
[1, 2]
def check(lst):
return len(lst) == len(filter(f, lst))
print check([0,1,2])
# Outputs False
print check([1,2,3])
# Outputs True