每日python—— zip()模块详解

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')]

更多精彩,关注“咋家”

5873968-2c9b55c5b23d499d.png
咋家

转载于:https://www.jianshu.com/p/fa0a4fb32600

猜你喜欢

转载自blog.csdn.net/weixin_34408624/article/details/91251347