1. Python map函数
Python中的map函数可以将一个函数映射到一个iterable对象上,返回一个新的可迭代对象,该对象包含了将原始iterable对象的每个元素传递给函数后的结果。
1.1 基本使用方法
基本用法是将一个函数和一个iterable对象作为参数传递给map函数:
def square(x):
return x ** 2
lst = [1, 2, 3, 4, 5]
squared = map(square, lst)
上述代码将一个名为square的函数和一个列表作为参数传递给map函数,得到了一个新的可迭代对象squared,该对象包含了将lst中的每个元素传递给square函数后的结果。可以使用list函数将该对象转换为列表来查看结果:
print(list(squared)) #[1, 4, 9, 16, 25]
在上述代码中,我们使用了list函数将map函数返回的可迭代对象转换为列表。
1.2 使用lambda函数
lambda函数可以用于定义简单的函数,通常只包含一个表达式。lambda函数的语法如下:
lambda 参数列表: 表达式
可以将lambda函数和map函数一起使用:
lst = [1, 2, 3, 4, 5]
squared = map(lambda x: x ** 2, lst)
print(list(squared)) #[1, 4, 9, 16, 25]
在上述代码中,我们使用了lambda函数代替了之前定义的square函数。
2. Python filter函数
Python中的filter函数用于过滤一个sequence(通常是一个列表)中的元素,根据指定的函数返回True或False。如果函数返回True,则元素会被保留,否则将被过滤掉。
2.1 基本使用方法
最基本的使用方法是将一个函数和一个sequence对象作为参数传递给filter函数:
def is_even(x):
return x % 2 == 0
lst = [1, 2, 3, 4, 5]
even = filter(is_even, lst)
print(list(even)) #[2, 4]
在上述代码中,我们定义了一个函数is_even,该函数返回True如果其参数为偶数,否则返回False。然后我们使用filter函数将该函数和一个列表作为参数传递给filter函数,得到了一个新的可迭代对象even,该对象只包含lst中的偶数元素。
2.2 使用lambda函数
与map函数一样,我们也可以使用lambda函数来代替之前定义的函数。例如,我们可以使用lambda函数找到列表中的所有奇数元素:
lst = [1, 2, 3, 4, 5]
odd = filter(lambda x: x % 2 == 1, lst)
print(list(odd)) #[1, 3, 5]
在上述代码中,我们使用了lambda函数代替了之前定义的is_even函数。
3. map和filter的组合使用
map和filter函数可以很容易地组合使用,以便在一个操作中对一个列表进行转换和筛选。例如,下面的代码将一个列表的所有偶数元素平方后返回:
lst = [1, 2, 3, 4, 5]
squared_even = map(lambda x: x ** 2, filter(lambda x: x % 2 == 0, lst))
print(list(squared_even)) #[4, 16]
在上述代码中,我们首先使用filter函数找到lst的所有偶数元素,然后使用map函数将这些元素平方。最终得到了一个新的可迭代对象squared_even,该对象只包含了lst的偶数元素的平方。
4. 总结
Python中的map和filter函数可以很方便地对列表进行转换和筛选。map函数将一个函数映射到一个iterable对象上,返回一个新的可迭代对象,该对象包含了将原始iterable对象的每个元素传递给函数后的结果。filter函数用于过滤一个sequence中的元素,根据指定的函数返回True或False。如果函数返回True,则元素会被保留,否则将被过滤掉。map和filter函数可以很容易地组合使用,以便在一个操作中对一个列表进行转换和筛选。