python中的map和filter之间的区别

时间:2019-12-10 21:13:08

标签: python

我有以下代码(使用map)检查mylist中的任何字符串是否存在于list1中的任何字符串中,如果存在,则代码会打印{{1}中的字符串}。这段代码运行良好。

list1

现在,如果我保持代码不变,并用过滤器替换map,它将打印子字符串(来自mylist=['dog','cat','bil'] def check(string1): list1=['doggy','abc','def','catelyn','billy'] for i in list1: if(string1 in i): return i x=list(map(check,mylist)) x

mylist

我仍然从mylist=['dog','cat','bil'] def check(string1): list1=['doghdjd','asnkbakv','bsvbubdb','gfdtcatkbnk','bkkbill'] for i in list1: if(string1 in i): return i x=list(map(check,mylist)) x 返回该字符串,但其他字符串已添加到list1。为什么会这样呢?

1 个答案:

答案 0 :(得分:2)

  • map将函数应用于每个元素,因此它将数组中的值替换为函数的结果,就像

    [check(value) for value in mylist]
    
  • filter将函数用作测试,以了解它是否保留该值,因为函数总是返回一个字符串(对于给定的输入),因此它被评估为非假,因此保留所有

    [value for value in mylist if check(value)]
    

如果您使用list1 = ['doggy', 'abc', 'def', 'catelyn', 'b-illy'],则check('bil')将返回None,因此过滤器将不会保留bil

print(list(map(check, mylist)))     # ['doggy', 'catelyn', None]
print(list(filter(check, mylist)))  # ['dog', 'cat']