filter()和map()之间的Python差异
作为python新手,我只是想找出filter()和map()之间的区别。 我编写了一个示例脚本,如下所示:filter()和map()之间的Python差异,python,Python,作为python新手,我只是想找出filter()和map()之间的区别。 我编写了一个示例脚本,如下所示: def f(x): return x % 2 == 0 def m(y): return y * 2 list = [1,2,3,4] flist = filter(f, list) print(list) print(flist) mlist = map(m, list) print(list) print(mlist) 我们看到,我们向过滤器和映射传递一个列表,并将它们的输出
def f(x): return x % 2 == 0
def m(y): return y * 2
list = [1,2,3,4]
flist = filter(f, list)
print(list)
print(flist)
mlist = map(m, list)
print(list)
print(mlist)
我们看到,我们向过滤器和映射传递一个列表,并将它们的输出分配给一个新列表
此脚本的输出为
[1, 2, 3, 4]
[2, 4]
[1, 2, 3, 4]
[2, 4, 6, 8]
问题是filter和map的函数调用看起来是一样的,所以如果我们交换传递给它们的函数的内容,它们将如何工作
def f(x): return x * 2
def m(y): return y % 2 == 0
list = [1,2,3,4]
flist = filter(f, list)
print(list)
print(flist)
mlist = map(m, list)
print(list)
print(mlist)
这导致
[1, 2, 3, 4]
[1, 2, 3, 4]
[1, 2, 3, 4]
[False, True, False, True]
这显示过滤器对函数求值,如果为true,则返回传递的元素。
这里是函数
def f(x): return x * 2
评估为
def f(x): return x * 2 != 0
相反,map计算函数表达式并将结果作为项返回。
所以filter总是希望它的函数执行比较类型的任务来过滤掉元素,而map则希望它的函数对语句求值以得到一些结果
这种理解正确吗?它们的工作原理略有不同,但您的想法是正确的 映射获取列表中的所有对象,并允许您对其应用函数 过滤器获取列表中的所有对象,并通过一个函数运行该函数,以创建一个新列表,其中包含该函数中返回True的所有对象 这里有一个例子
def square(num):
return num * num
nums = [1, 2, 3, 4, 5]
mapped = map(square, nums)
print(*nums)
print(*mapped)
这个的输出是
1 2 3 4 5
1 4 9 16 25
下面是一个过滤器的示例
def is_even(num):
return num % 2 == 0
nums = [2, 4, 6, 7, 8]
filtered = filter(is_even, nums)
print(*nums)
print(*filtered)
这项研究的结果将是
2 4 6 7 8
2 4 6 8
我想是的,你基本上了解情况。 Map和filter都是将函数应用于可重用项的方法。 在映射中可以使用多个ITerable
definition : map(function_object, iterable1, iterable2,...)
鉴于
在过滤器中只能使用一个iterable
definition : filter(function_object, iterable)
在过滤器中,函数_对象必须仅返回布尔值。
为了便于示例,下面是以多个iterables作为输入的映射
list_a = [1, 2, 3]
list_b = [10, 20, 30]
map(lambda x, y: x + y, list_a, list_b) # Output: [11, 22, 33]
在映射中:函数将应用于iterable的所有对象。
In filter:函数将仅应用于在表达式中指定的条件下为True的iterable对象。您的示例太精确了。
在filter函数中,您应该传递一个函数和一个列表(该函数的计算结果必须为true或false)。如果在函数中传递的元素返回true,则filter函数将把传递的元素放入一个新列表中。其中,as map函数将获取一个元素并将其传递给函数,然后返回函数的输出并将其存储到新列表中。根据我的理解,以下是map和filter之间的区别:
def even(num):
if(num % 2 == 0):
return 'Even'
num_list=[1,2,3,4,5]
打印(列表(筛选器(偶数,num_列表))->>>>>>输出:[2,4]
打印(列表(映射(偶数,num_列表))->>>>>>>>输出:[无,'偶数',无,'偶数',无]
因此,我们可以说:
filter():格式化包含满足特定条件的元素的新列表。
map():函数遍历给定iterable中的所有项,并执行我们作为参数传递的函数。map():函数将应用于iterable的所有对象,我们可以根据需要使用任意多的Literablefilter():函数将仅应用于iterable的那些对象,并添加到结果中。如果该项为True,则我们只能使用一个literable 在下面的示例中,代码0不会添加到筛选函数中,因为在某些情况下,0是False的表示形式,因此不会添加到筛选中,也不会添加到映射函数结果中
def check(num):
return num*1
nums = [0,2, 4, 6, 7, 8]
result = filter(check, nums)
print(list(result))
def check(num):
return num*1
nums = [0,2, 4, 6, 7, 8]
result = map(check, nums)
print(list(result))
通过阅读随附的文档字符串,可以加深对理解的可能重复。在python控制台中键入
filter?
或map?
,并以简洁的形式阅读它们应该做什么。我在filter中使用了平方函数来查看我得到了什么,我得到了list(nums)的所有值。这意味着filter函数基本上用于“条件检查”,当map()中的i pas是_偶数函数时,我会为列表中的每个数字获取布尔值(比如,第一项是1,这是奇数,所以我得到false,等等)。所以,我认为map()基本上用于对列表项的操作。我说得对吗?