python3学习笔记--zip()函数用法

与python2不同的是,zip传入可迭代对象,将对象中对应的元素打包成一个个tuple,返回zip对象。

a=[1,2,3]
b=[4,5,6]
c=['a','b','c','d']
a_b=zip(a,b)
print(a_b)

<zip object at 0x000000001015F048> zip对象是迭代器iterator,可以验证一下:

from collections import Iterator
isinstance(a_b,Iterator)

True 所以要用list得到预想的结果。

a_b=list(zip(a,b))
a_c=list(zip(a,c))
print(a_b)
print(a_c)
[(1, 4), (2, 5), (3, 6)]
[(1, 'a'), (2, 'b'), (3, 'c')]

可以看到a与c长度不一致时,按照长度短的a返回list。 类似,利用*将a_b,a_c, unzip解压时,返回的也是迭代器,用list得到预期结果。

list(zip(*a_b))
list(zip(*a_c))
[(1, 2, 3), (4, 5, 6)]
[(1, 2, 3), ('a', 'b', 'c')]

例子:完成矩阵转置,

d=[a,b]
list(map(list,zip(*d)))

[[1, 4], [2, 5], [3, 6]] 

或者用列表生成式: [ [row[x] for row in d] for x in range(len(d[0]))]

posted @ 2017-10-23 16:54  未闻花开  阅读(171)  评论(0编辑  收藏  举报