'''
使用了4种方法模拟实现zip(*seqs)的功能
'''
def myzip(*seqs):
seqs = [list(s) for s in seqs]
res = []
while all(seqs):
res.append(tuple(s.pop(0) for s in seqs))
return res
def mymappad(*seqs, pad=None):
seqs = [list(s) for s in seqs]
res = []
while any(seqs):
res.append(tuple((s.pop(0) if s else pad) for s in seqs))
return res
def myzip2(*seqs):
minlen = min(len(s) for s in seqs)
return [tuple(s[i] for s in seqs) for i in range(minlen)]
def mymappad2(*seqs, pad=None):
maxlen = max(len(s) for s in seqs)
return [tuple(s[i] if i < len(s) else pad for s in seqs) for i in range(maxlen)]
def myzip3(*seqs):
seqs = [list(s) for s in seqs]
while all(seqs):
yield tuple(s.pop(0) for s in seqs)
def mymappad3(*seqs, pad=None):
seqs = [list(s) for s in seqs]
while any(seqs):
yield tuple((s.pop(0) if s else pad) for s in seqs)
def myzip4(*seqs):
minlen = min(len(s) for s in seqs)
return (tuple(s[i] for s in seqs) for i in range(minlen))
def mymappad4(*seqs, pad=None):
maxlen = max(len(s) for s in seqs)
return (tuple(s[i] if i < len(s) else pad for s in seqs) for i in range(maxlen))
s1, s2 = 'abcdef', '123'
print(myzip(s1, s2))
print(mymappad(s1, s2))
print(myzip2(s1, s2))
print(mymappad2(s1, s2))
for i in myzip3(s1, s2):
print(i, end = ' ')
print()
for i in mymappad3(s1, s2):
print(i, end = ' ')
print()
for i in myzip4(s1, s2):
print(i, end = ' ')
print()
for i in mymappad4(s1, s2):
print(i, end = ' ')
print()
自定义zip函数
最新推荐文章于 2022-07-24 16:38:33 发布