lambda函数简介
b = lambda x: 'Even' if x%2 == 0 else 'Odd'
b(9)
b(4)
'Even'
def return_sum(func, lst):
result = 0
for i in lst:
# if vol satisfies func
if func(i):
result = result + i
return result
lst = [11, 14, 21, 5, 78, 45, 29, 28]
x = lambda a: a%2 == 0
y = lambda a: a%2 != 0
z = lambda a: a%3 == 0
print(return_sum(x, lst))
print(return_sum(y, lst))
print(return_sum(z, lst))
120
111
144
Python内置高阶函数
# Map函数
"""
Map()函数会根据提供的函数对指定序列做映射。
Map()函数是一个接收两个参数的函数。第一个参数function以参数序列中的每一个元素调用function函数,第二个是
任何可迭代的序列数据类型。返回包含每次function函数返回值的新列表。
map(function, iterable, ....)
"""
arr = [2, 4, 5, 8]
arr1 = list(map(lambda x: x*x, arr))
print(arr1)
[4, 16, 25, 64]
students = [
{
'name': 'John Doe',
'father': 'Robert Doe',
'Address': '123 Hall street'
},
{
'name': 'Rahul Garg',
'father name': 'Kamal Garg',
'Address': '3-Upper-Street corner'
},
{
'name': 'Angela Steven',
'father name': 'Jabob steven',
'Address': 'Unknown'
}
]
print(list(map(lambda student: student['name'], students)))
['John Doe', 'Rahul Garg', 'Angela Steven']
Filter函数()
"""
Filter()函数根据给定的特定条件过滤掉数据。即在函数中设定过滤条件,迭代元素,保留返回值为True的元素
map函数()对每个元素进行操作,而filter函数仅输出满足特定要求的元素
假设有一个水果名称列表,任务是只输出那些名称中包含字符“g”的名称
"""
fruits = ['mango', 'apple', 'orange', 'cherry', 'grapes']
print(list(filter(lambda fruit: 'g' in fruit, fruits)))
# filter(function or None, iterable) -- >filter object
# 返回一个迭代器, 为那些函数或项为真的可迭代项,如果函数为None,则返回为真的项
['mango', 'orange', 'grapes']
# Reduce函数
from functools import reduce
lst = [2, 4, 6, 8 , 10]
print(reduce(lambda x, y:x + y , lst))
30
方法一
# 如何快速找到多个字典的公共键
dl = [d1, d2, d3] # d1, d2, d3为字典,目标找到所有字典的公共键
[k for k in dl[0] if all(map(lambda d: k in d, dl[1:]))]
example
dl = [{
1:'life', 2: 'is'},
{
1: 'short', 3: 'i'},
{
1: 'use', 4: 'python'}]
[k for k in dl[0] if all(map(lambda d: k in d, dl[1:]))]
[1]
解析
dl = [{
1:'life', 2: 'is'},
{
1: 'short', 3: 'i'},
{
1: 'use', 4: 'python'}]
# 列表表达式遍历dl中第一个字典中的键
[k for k in dl[0]]
# [1, 2]
# lambda匿名函数判断字典中的键,即k值是否在其余字典中
list(map(lambda d: 1 in d, dl[1:]))
# [True, True]
list(map(lambda d: 2 in d, d1[1:]))
# [False, False]
# 列表表达式条件为上述结果([True, True])全为True, 则输出对应的k值
# 1
[False, False]
方法二
# 利用集合(set)的交集操作
from functools import reduce
# reduce(lambda a, b: a* b, range(1, 11)) # 101
reduce(lambda a, b:a & b, map(dict.keys, dl))
om/u_14940497/10469827
{
1}