python 3.6.5
sample:
map() 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表
map(function, iterable, ...)
- function -- 函数,有两个参数
- iterable -- 一个或多个序列
Python 2.x 返回列表。
Python 3.x 返回迭代器
python 3.x 中map函数返回的是 迭代器对象,无法像python2.x 直接返回一个list对象,假如需要:list(map(func,iterable))
def func(num):
if isinstance(num, int):
num = num + 1
return num
print(list(map(func, [1, 2, 3, 4, 5, 6])))
print(map(func, [1, 2, 3, 4, 5, 6]))
# [2, 3, 4, 5, 6, 7]
# < map object at 0x0000000002210C88 >
def func(num):
return num ** 2
iter_func = map(func, [1, 2, 3, 4, 5, 6, 7, 8, 9])
print(iter_func)
# < map object at 0x00000000021D0D30 >
for item in iter_func:
print(item, end=' ')
print()
# 1
# 4
# 9
# 16
# 25
# 36
# 49
# 64
# 81
iter_func = map(func, [1, 2, 3, 4, 5, 6, 7, 8, 9])
print(list(iter_func))
# [1, 4, 9, 16, 25, 36, 49, 64, 81]
def fun(x, y, z):
return x * y * z
iter_fun = map(fun, [1, 2, 3], [1, 2, 3], [1, 2, 3])
print(iter_fun)
# < map object at 0x0000000002220E48 >
print(list(iter_fun))
# [1, 8, 27]
s = [1, 2, 3]
print(list(map(lambda x: x + 1, s)))
# >>>[2,3,4]
str = "azthis is really a string example....wow!!!"
print("Max character: " + max(str))
# Max character: z
str = "this is a string example....wow!!!"
print("Max character: " + max(str))
# Max character: x
s = [1, 2, 3]
print(list(map(lambda x, y, z: x * y * z, s, s, s)))
# >>>[1,8,27]
匿名函数定义
lambda x,y,z:x+y+z
#x,y,z 是三个参数
#x+y+z 是返回体,不需要return
#配合使用可以让下横线简单明了、减少代码量
# max()
# 方法返回给定参数的最大值,参数可以为序列。
lis_num = [1, 34, 6, 7, 3, 9]
lis_set = [(1, 2), (2, 3), (3, 4)]
dic = {'yanxiatingyu': 17,
'egon': 18,
'alex': 88,
'liu sir': 12
}
print(max(lis_num))
print(max(lis_set))
大量例子:
例01: 字符串联合,有默认值,也可以x=(lambda...)这种格式
>>> x = (lambda x="Boo",y="Too",z="Zoo": x+y+z)
>>> x("Foo")
'FooTooZoo'
例02: 和列表联合使用
>>> L = [lambda x:x**2,\
lambda x:x**3,\
lambda x:x**4]
>>> for f in L:
... print f(2)
...
4
8
16
也可以如下面这样调用
>>> print L[0](3)
9
例03: 和字典结合使用
>>> key = 'B'
>>> dic = { 'A': lambda: 2*2,\
... 'B': lambda: 2*4,\
... 'C': lambda: 2*8}
>>> dic[key]()
8
例04: 求最小值
>>> lower = lambda x,y: x if x<y else y
>>> lower('aa','ab')
'aa'
例05: 和map及list联合使用
>>> import sys
>>> showall = lambda x:list(map(sys.stdout.write,x))
>>> showall(['Jerry\n','Sherry\n','Alice\n'])
Jerry
Sherry
Alice
>>> showall(['Jerry','Sherry','Alice'])
JerrySherryAlice
等价于下面
>>> showall = lambda x: [sys.stdout.write(line) for line in x]
>>> showall(('I\t','Love\t','You!'))
I Love You![None, None, None]
例06: 在Tkinter中定义内联的callback函数
import sys
from Tkinter import Button,mainloop
x = Button(text='Press me',
command=(lambda:sys.stdout.write('Hello,World\n')))
x.pack()
x.mainloop()
>>>
Hello,World!
Hello,World!
例07: lambda和map联合使用,
>>> out = lambda *x: sys.stdout.write(' '.join(map(str,x)))
>>> out('This','is','a','book!\n')
This is a book!
例08: 判断字符串是否以某个字母开头
>>> print (lambda x: x.startswith('B'))('Bob')
True
-----
>>> Names = ['Anne', 'Amy', 'Bob', 'David', 'Carrie', 'Barbara', 'Zach']
>>> B_Name= filter(lambda x: x.startswith('B'),Names)
>>> B_Name
['Bob', 'Barbara']
例09: lambda和map联合使用:
>>> squares = map(lambda x:x**2,range(5))
>>> squares
[0, 1, 4, 9, 16]
例10. lambda和map,filter联合使用:
>>> squares = map(lambda x:x**2,range(10))
>>> filters = filter(lambda x:x>5 and x<50,squares)
>>> filters
[9, 16, 25, 36, 49]
例11. lambda和sorted联合使用
#按death名单里面,按年龄来排序
#匿名函数的值返回给key,进来排序
>>> death = [ ('James',32),
('Alies',20),
('Wendy',25)]
>>> sorted(death,key=lambda age:age[1]) #按照第二个元素,索引为1排序
[('Alies', 20), ('Wendy', 25), ('James', 32)]
例12. lambda和reduce联合使用
>>> L = [1,2,3,4]
>>> sum = reduce(lambda x,y:x+y,L)
>>> sum
10
例13. 求2-50之间的素数
#素数:只能被1或被自己整除的数
>>> nums = range(2,50)
>>> for i in nums:
nums = filter(lambda x:x==i or x % i,nums)
>>> nums
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
例14. 求两个列表元素的和
>>> a = [1,2,3,4]
>>> b = [5,6,7,8]
>>> map(lambda x,y:x+y, a,b)
[6, 8, 10, 12]
例15. 求字符串每个单词的长度
>>> sentence = "Welcome To Beijing!"
>>> words = sentence.split()
>>> lengths = map(lambda x:len(x),words)
>>> lengths
[7, 2, 8]
写成一行:
>>> print map(lambda x:len(x),'Welcome To Beijing!'.split())
print(max(dic))
print(max(dic.items()))
print(max(dic.keys()))
print(max(dic.values()))
print(max(dic, key=lambda suibian: dic[suibian]))
print(max(dic, key=lambda suibian: dic[suibian]))
# 34
# (3, 4)
# yanxiatingyu
# ('yanxiatingyu', 17)
# yanxiatingyu
# 88
# alex
# alex
lambda 参数1,参数2,: 代码
lambda x: x * x
lambda x,y:x*y*x
lambda x,y,z:x+y+z