Python zip Python zip函数

zip([iterable, ...])
zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。

若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同。利用*号操作符,可以将list unzip(解压)。

一,把list使用zip创建一个元组对的列表
list1 = [1,2,3,4]
list2 = [5,6,7,8]
print zip(list1,list2) 
#输出结果是   [(1, 5), (2, 6), (3, 7), (4, 8)]

二:利用for循环支持并行迭代
list1 = [1,2,3,4]
list2 = [5,6,7,8]

for (x,y) in zip(list1,list2):
    print (x,y, "==",x+y)
# 输出结果是:
   # (1, 5, '==', 6)
    #(2, 6, '==', 8)
    #(3, 7, '==', 10)
    #(4, 8, '==', 12)

三:把字符串转换为元组的列表

当两个字符串的长度不同时,zip会以最短序列的长度为准来截断所得到的元组 列表

str1 = "abcd"
str2 = "123456"
print zip(str1,str2)

输出结果是:[('a', '1'), ('b', '2'), ('c', '3'), ('d', '4')]

四:把元组转换为元组的列表

t1 = (1,2,3)
t2 = (4,5,6)
t3 = (7,8,9)
print list(zip(t1,t2,t3))

输出结果是:[(1, 4, 7), (2, 5, 8), (3, 6, 9)]

五:使用zip构造字典

   方法一:使用for循环

k = ["a","b","c"]
v = ["1","2","3"]
d2 = {}
for (k,v) in zip(k,v):d2[k]=v
print d2

   方法er:使用dict

k = ["a","b","c"]
v = ["1","2","3"]
d3 = dict(zip(k,v))
print d3

   方法一和方法二的输入结果都是  {'a': '1', 'c': '3', 'b': '2'}

六:矩阵的行列互换

第一种方法

  有一个由列表描述的二维矩阵   a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

  通过python列表推导的方法,我们也能轻易完成这个任务

print [ [row[col] for row in a] for col in range(len(a[0]))]

  输出结果是:[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

第二种方法:

 a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
 print zip(*a)  输出结果是:[(1, 4, 7), (2, 5, 8), (3, 6, 9)]

print  map(list,zip(*a)) 输出结果是:[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

  这种方法速度更快但也更难以理解,将list看成tuple解压,恰好得到我们“行列互换”的效果,再通过对每个元素应用list()函数,将tuple转换为list

原文地址:https://www.cnblogs.com/xuchunlin/p/6676304.html