map(function,iterable) 返回一个迭代器,由每个可迭代对象符合函数条件的组成。传送结果给这个迭代器。
等价于:
def starmap(function.iterable):
# starmap(pow, [(2, 5), (3, 2), (10, 3)]) --> 32 9 1000
for args in iterable:
yield function(*args)
例:
l1 = [1, 2, 3, 4]
print(list(map(lambda x: x ** 2, l1)))
print(list(map(lambda x, y: x + y, [345, 3439, 34], [353, 345])))
>
[1, 4, 9, 16]
[698, 3784]
例
'''
map(fun, iterable)接收的是一个可迭代对象iterable,把可迭代对象中的元素作为fun的参数,有几个元素就返回几个。
map里面的lambda每个元素都要设置返回值
'''
# 1 列表name中的每个元素增加‘abc’后缀,用映射的方法
name = ['oldboy', 'alex', 'wusir']
name1 = map(lambda x: x + 'abc', name)
print(list(name1))
# 2 返回一个列表,每个元素是l中的字典的值加‘abc’后缀
l=[{'name':'alex'},{'name':'y'}]
l1 = map(lambda x: x + 'abc', [i['name'] for i in l])
print(list(l1))
# 3 得到一个列表,由每只股票的总价格组成
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}]
#第一种方法
li = map(lambda x: x[0] * x[1], [(e['shares'], e['price']) for e in portfolio])
# 第二种方法
def fun(dic):
return dic['shares'] * dic['price']
l1 = map(fun, portfolio)
print(list(l1))
# 4 得到一个价格大于100由元祖组成的列表,如果小于100,就为None
li9 = map(lambda x: x if x['price'] > 100 else None, portfolio)
li2 = list(li9)