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 = ""
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 = ["","",""]
d2 = {}
for (k,v) in zip(k,v):d2[k]=v
print d2
方法er:使用dict
k = ["a","b","c"]
v = ["","",""]
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