zip(*iterable)
zip()函数是一个python内建函数,接受一系列迭代对象,然后将对应元素值以元组的形式返回,在python3中,最终返回值不以list对象显示,如果需要显示,需要进行list()转换。
>>> a =[1,2,3]
>>> b =[4,5,6]
>>> zipped =zip(a,b)
>>> zipped
<zip object at 0x000001C04141C648>
>>> list(zipped)
[(1, 4), (2, 5), (3, 6)]
>>> list(zip(*zipped))
[]
>>> zipped =zip(a,b)
>>> list(zip(*zipped))
[(1, 2, 3), (4, 5, 6)]
注意上面的第9行为什么会返回一个空列表?因为zip()函数创建的是一个只能访问一次的函数,在list()操作时,已经访问过了,所以再对其进行操作时为空。
下面来看一个二维矩阵转换的例子(行列互换)
>>> c =[[1,2,3],[4,5,6],[7,8,9]]
>>> list(zip(*c))
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
>>> map(list, zip(*c))
<map object at 0x000001C041405E10>
>>> list(map(list, zip(*c)))
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
从上面的例子可以看出zip()中带星号和不带星号的区别,对于已经包含迭代对象的列表来说,星号进行的是解压操作,先将内部列表解压出来,然后再组合成元组。
最后,再来看个关于字典的操作,若是想对字典进行排序怎么做?直接进行sorted()操作会作用在键上,此时,可以先对字典进行zip()操作,使键值位置互换,然后进行sorted()操作,此时得到就是按照值大小排序出的字典,同时还保留相应键的信息。
prices = {
'ACME': 45.23,
'AAPL': 612.78,
'IBM': 205.55,
'HPQ': 37.20,
'FB': 10.75
}
prices_sorted = sorted(zip(prices.values(), prices.keys()))
# prices_sorted is [(10.75, 'FB'), (37.2, 'HPQ'),
# (45.23, 'ACME'), (205.55, 'IBM'),
# (612.78, 'AAPL')]
更多精彩,关注“咋家”

网友评论