python的map和zip

在使用map的时候,如果func只有一个参数,那么iterables直接传递一个list是可行的,但是如果func默认不止一个参数,那么这里传给map的参数需要额外关注,不能直接使用list或者tuple的组合,我们先通过一张图,来直观的看一下map参数的格式:

假设func1是我们定义的参数,有4个固定参数。正常调用func1直接使用func(1,2,3,4)即可,但是如果通过map(func1, *args)的方式来循环调用,这里的args参数要按照图里面参数矩阵橙色框的模式来组合(按列组合),例如:

map(func1, [arg1,arg1],[arg2,arg2],[arg3,arg3],[arg4,arg4])

通过一个简单的示例,我们可以看一下结果:

map成功执行了,但是一般生成多组参数的时候,通常都会使用[[arg1,arg2,arg3,arg4],[arg1,arg2,arg3,arg4]]的方式来存储,所以应对这种多参函数的map调用时,需要将这种普通的参数对列表,合理的转化为按列组合的参数对,组合后的list的长度等于func的参数个数。此处可以用zip函数来实现这一需求

zip函数说明中的示例,也应征了这一目的。添加几组参数,重新使用上面的示例进行演示

python3对map函数有一些改进,map返回的不再是一个list,而是一个可迭代对象,所以需要通过list()获取迭代内容的时候,func才会被执行

 

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据