我有以下代码(使用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
。为什么会这样呢?
答案 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']