本帖最后由 graceasyi 于 2018-8-21 11:27 编辑
# 方法一:list
- def newzip(*args):
- ml = max([len(a) for a in args]) # 参数中最长的长度
- result = []
- for i in range(0, ml):
- tup = ()
- for a in range(0, len(args)):
- try:
- tup += (args[a][i],)
- except IndexError:
- tup += (None, )
- result.append(tup)
- return result
- str1 = 'ABC'
- list1 = [1, 2, 3, [4, 5]]
- tuple1 = (1.1, 2.2)
- print(newzip(str1, list1, tuple1))
复制代码
结果:
[('A', 1, 1.1), ('B', 2, 2.2), ('C', 3, None), (None, [4, 5], None)]
# 方法二:yield
- def newzip1(*args):
- ml = max([len(a) for a in args]) # 参数中最长的长度
- for i in range(0, ml):
- tup = ()
- for a in range(0, len(args)):
- try:
- tup += (args[a][i],)
- except IndexError:
- tup += (None, )
- yield tup
- str1 = 'ABC'
- list1 = [1, 2, 3, [4, 5]]
- tuple1 = (1.1, 2.2)
- for r in newzip1(str1, list1, tuple1):
- print(r)
复制代码
结果:
('A', 1, 1.1)
('B', 2, 2.2)
('C', 3, None)
(None, [4, 5], None) |