Python基础——zip

来源:互联网 发布:python开发实战1200例 编辑:程序博客网 时间:2024/06/14 02:03
>>> x = range(0, 27)>>> y = [chr(x) for x in range(97, 123)]>>> [(i, j) for i in x for j in y](1, 'a')(1, 'b')...(2, 'a')(2, 'b')...(26, 'x')(26, 'y')(26, 'z')

[(i, j) for i in x for j in y] 也即:

l = []for i in x:    for j in y:        l.append((i, j))    

表达的是一种笛卡尔积的关系。那么如何实现一一对应呢,这时就需要zip操作了:

>>> [(i, j) for i, j in zip(x, y)][(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e'), (5, 'f'), (6, 'g'), (7, 'h'), (8, 'i'), (9, 'j'), (10, 'k'), (11, 'l'), (12, 'm'), (13, 'n'), (14, 'o'), (15, 'p'), (16, 'q'), (17, 'r'), (18, 's'), (19, 't'), (20, 'u'), (21, 'v'), (22, 'w'), (23, 'x'), (24, 'y'), (25, 'z')]

不由得让人联想起meshgrid函数,我们要实现`[0, 1, 2, 3, 4, 5]×[0, 1, 2, 3, 4, 5]网格的整数节点位置:

>>> [Y, X] = np.meshgrid(range(0, 6), range(0, 6))>>> Yarray([[0, 1, 2, 3, 4, 5],       [0, 1, 2, 3, 4, 5],       [0, 1, 2, 3, 4, 5],       [0, 1, 2, 3, 4, 5],       [0, 1, 2, 3, 4, 5],       [0, 1, 2, 3, 4, 5]])>>> Xarray([[0, 0, 0, 0, 0, 0],       [1, 1, 1, 1, 1, 1],       [2, 2, 2, 2, 2, 2],       [3, 3, 3, 3, 3, 3],       [4, 4, 4, 4, 4, 4],       [5, 5, 5, 5, 5, 5]])
for x in range(0, 6):    for y in range(0, 6):        x - y

便可转换为矩阵化的做法:

X-Y

我们再次回到zip本身,如何实现一个list(tuple)前后元素的调换再集合:

[1, 2, 3, 4, 5] -> [(2, 1), (3, 2), (4, 3), (5, 4)]

对一个list做两次索引再zip:

>>> l = [1, 2, 3, 4, 5]>>> [(j, i) for i, j in zip(l[:-1], l[1:])][(2, 1), (3, 2), (4, 3), (5, 4)]
0 0
原创粉丝点击