#! /usr/bin/python
# Filename: map2.py
def map2(arg1,*arg2):
if hasattr(arg1,'__call__')==False:
typ = type(arg1)
raise TypeError,'%s object is not callable' %typ
if hasattr(arg2,'__iter__')==False:
raise TypeError,'argument 2 to map() must support iteration'
length=len(arg2[0])
for item in arg2:
if len(item)<>length:
raise TypeError,"the argument of arg2's length is different"
list = [apply(a,(x)) for (x) in zip(*arg2)]
return list
a = lambda x,y,z,t:x*y*z*t
print map2(a,[1,2,3,4],[5,6,7,8],[8,1,2,5],[1,5,6,7])
生成器:
#! /usr/bin/pythpn
# encoding:utf-8
def zip2(*arg2):
len1 = len(arg2)
len2 = len(arg2[0])
print len1
print len2
for j in range(len2):
yield tuple([arg2[i][j] for i in range(len1)])
l1 = [1,4,5]
l2 = [3,6,8]
l3 = [7,6,5]
for item in zip2(l1,l2,l3):
print item