AI教程网 - 未来以来,拥抱AI;新手入门,从AI教程网开始......

零基础学Python:zip()补充

零基础学Python AI君 144℃

《语句(4)》中,对zip()进行了阐述,但是,由于篇幅限制,没有阐述的太完整。所以,本讲再次将它拿出来,希望能够有一个完成的独立阐述,以便学习者参考。

内建函数zip()

zip()是一个内建函数,对它的描述为:

zip()的参数是可迭代对象。例如:

>>> colors = ["red", "green", "blue"]
>>> values = [234, 12, 89, 65]
>>> for col, val in zip(colors, values):
    ...     print (col, val)
    ... 
    ('red', 234)
    ('green', 12)
    ('blue', 89)

注意观察,zip()自动进行了匹配,并且抛弃不对应的项。

参数*iterables

这是zip()的雕虫小技了,在前面的文档中,zip()的参数使*iterables,这是什么意思呢?

《函数(3)》 中,讲述“参数收集”和“另外一种传值”方法时,遇到过类似的参数,把其中一个例子再拿出来欣赏:

>>> def add(x,y):
    ...     return x + y
    ... 
>>> add(2,3)
5
>>> bars = (2,3)
>>> add(*bars)
5

zip()也类似上面示例中构造的那个add()函数。

>>> dots = [(1, 2), (3, 4), (5, 6)]
>>> x, y = zip(*dots)
>>> x
(1, 3, 5)
>>> y
(2, 4, 6)

利用这个功能,就比较容易实现矩阵的转置了。补充:关于矩阵的知识,可以参阅维基百科词条:矩阵

>>> m = [[1, 2], 
         [3, 4], 
         [5, 6]]
>>> zip(*m)
[(1, 3, 5), 
 (2, 4, 6)]

下面再看一个有点绚丽的:

>>> seq = range(1, 10)
>>> zip(*[iter(seq)]*3)
[(1, 2, 3), (4, 5, 6), (7, 8, 9)]

感觉有点太炫酷了,不是太好理解。其实,分解一下,就是:

>>> x = iter(range(1, 10))
>>> zip(x, x, x)
[(1, 2, 3), (4, 5, 6), (7, 8, 9)]

这种炫酷的代码,我不提倡应用到编程实践中,这里仅仅使展示一下zip()的使用罢了。

关于在字典中使用zip()就不做过多介绍了,因为在 《语句(4)》 中已经做了完整阐述。

更酷的示例

最后,展示一个来自网络的示例,或许在某些时候用一下,能够人前炫耀。

>>> a = [1, 2, 3, 4, 5]
>>> b = [2, 2, 9, 0, 9]
>>> map(lambda pair: max(pair), zip(a, b))
[2, 2, 9, 4, 9]

参考:

  • http://pavdmyt.com/python-zip-fu/
  • https://bradmontgomery.net/blog/2013/04/01/pythons-zip-map-and-lambda/

转载请注明:www.ainoob.cn » 零基础学Python:zip()补充

喜欢 (0)or分享 (0)