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
如果觉得对您有帮助,麻烦您点一下推荐,谢谢!
好记忆不如烂笔头
好记忆不如烂笔头