Python(7) zip()

来源:互联网 发布:广州11选五遗漏数据 编辑:程序博客网 时间:2024/06/06 15:01
zip(iter1 [,iter2 [...]]) --> zip objectReturn a zip object whose .__next__() method returns a tuple wherethe i-th element comes from the i-th iterable argument.  The .__next__()method continues until the shortest iterable in the argument sequenceis exhausted and then it raises StopIteration.

简单来说呢,zip函数是将传入的一系列iter里面的元素重新组织成为tuple,第i个tuple是由所有iter的第i个元素共同组成。当iter的长度如果不相同的话,那么返回的list的长度和长度最短的iter的长度相同。注意zip()返回的是一个zip ojbect,如果想取出里面的值,必须要用到next()

# 什么都不传入res = []for i in zip():    res.append(i)print(res)#输出:[]
# 只传入一个iterx = [1, 2, 3]res = []for i in zip(x):    res.append(i)print(res)#输出:[(1,), (2,), (3,)]
# 传入多个长度相同的iterx = [1, 2, 3]y = [4, 5, 6]z = [7, 8, 9]res = []for i in zip(x,y,z):    res.append(i)print(res)#输出: [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
# 传入多个长度不同的iterx = [1, 2, 3]y = [4, 5, 6, 7]z = [8, 9, 10, 11, 12]res = []for i in zip(x, y, z):    res.append(i)print(res)#输出:[(1, 4, 8), (2, 5, 9), (3, 6, 10)]
# unzip res = [(1, 4, 7), (2, 5, 8), (3, 6, 9)]for i in zip(*res):    print(i)#输出: (1, 2, 3)\n(4, 5, 6)\n(7, 8, 9)这个过程,还可以理解为矩阵转置res = [(1, 4, 7), (2, 5, 8), (3, 6, 9)]for i in zip(*zip(*res)):    print(i)#输出:(1, 4, 7)\n(2, 5, 8)\n(3, 6, 9) 在函数调用中使用*list/tuple的方式表示将list/tuple分开,作为位置参数传递给对应函数所以zip(*res)<=>zip((1, 4, 7), (2, 5, 8), (3, 6, 9))

虽然zip()函数返回的是一个zip object,无法通过直接print的方式来打印出值。但是可以被转换掉,特别是可以转换成字典,不过当转换成字典的时候,iter的数量要2

x = [1, 2, 3]y = [4, 5, 6, 7]print(list(zip(x,y))) # [(1, 4), (2, 5), (3, 6)]print(dict(zip(x,y))) # {1: 4, 2: 5, 3: 6}# 有人用map方法做,不过在python3.x里面map返回的是一个map object,所以同样不能直接打印出来,但是还是可以用list做嵌套唷,不过这样是不是有点脱裤子。。
原创粉丝点击