map()和filter()函数讲解与示例

1.map(function,iterable):会根据提供的函数对指定序列做映射。第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

示例1
lst = [1,2,3,4,5]
result = map(lambda x : x**2 ,lst)
print(type(result))
print(result)
print(list(result))
  
#输出 <class 'map'>
#输出 <map object at 0x000001DFFA442470>
#输出 [1,4,9,16,25]
 
示例2:
#假设用户输入的英文名字不规范,没有按照首字母大写,后续字母小写的规则,请利用map()函数,把一个list(包含若干不规范的英文名字)变成一个包含规范英文名字的list:

def f(s):
  return s[0:1].upper() + s[1:].lower()

lst = ['lll', 'lKK', 'wXy']

ret = map(f, lst)

print(type(ret))

print(ret)

print(list(ret))

输出结果:

# <class 'map'>

# <map object at 0x0000000005EE2E48>

# ['Lll', 'Lkk', 'Wxy'] 

示例3:

#如下列表,每个小字典的name对应股票名字,shares对应多少股,price对应股票的价格

portfolio = [ {'name': 'IBM', 'shares': 100, 'price': 91.1}, {'name': 'AAPL', 'shares': 50, 'price': 543.22}, {'name': 'FB', 'shares': 200, 'price': 21.09}, {'name': 'HPQ', 'shares': 35, 'price': 31.75}, {'name': 'YHOO', 'shares': 45, 'price': 16.35}, {'name': 'ACME', 'shares': 75, 'price': 115.65} ]

1、通过map和lambda函数配合计算出,购买的每只股票的总价,此处使用了round()函数用来保证小数的精确位数

ret = map(lambda dic:{dic["name"]:round(dic["shares"]*dic["price"],2)},portfolio)

print(list(ret))

输出结果:

[{'IBM': 9110.0}, {'AAPL': 27161.0}, {'FB': 4218.0}, {'HPQ': 1111.25}, {'YHOO': 735.75}, {'ACME': 8673.75}]

2、用filter过滤出,单价大于100的股票有哪些

ret = filter(lambda dic:dic["price"]>100,portfolio) print(list(ret))

print(list(ret))

输出结果:

[{'name': 'AAPL', 'shares': 50, 'price': 543.22}, {'name': 'ACME', 'shares': 75, 'price':115.65}]

2.filter(function,iterable):筛选函数;函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

def func(x):
    return % 2 == 0
req = filter(func,range(10))
print(req)
 
#输出 [2,4,6,8]
原文地址:https://www.cnblogs.com/rubickcn/p/13521188.html