python中有趣的zip函数

懂python的都知道有一个内置函数zip,作用是将多个序列里面的对应组合起来。

直接上图。

zip作用图示

图中a1、a2、result都是序列。zip在执行的时候将序列a1中的一个元素取出,再取出序列a2对应位置中的元素,组合成一个tuple,最后将这些tuple组合成一个数组。

所以,最后我们得到一个数组result=[(1,a),(2,b),(3,c),…]

所以这个zip的意思理解成拉链比较形象。

两个序列是两边的链,zip函数将它们拉上组合起来。

当然zip函数可接收多个序列。

然后很有趣的事情就来了,如果在这之后再执行zip(*result),就可以取回序列a1和序列a2!

代码上看更直观。

1
2
3
4
5
6
7
>>> a1 = [1, 2, 3]
>>> a2 = ['a', 'b', 'c']
>>> result = zip(a, b)
>>> result
[(1, 'a'), (2, 'b'), (3, 'c')]
>>> zip(*result)
[(1, 2, 3), ('a', 'b', 'c')]

注意到result前有一个*号,这其实是告诉zip函数传入的是一个序列,于是result从一个参数变成了多个参数了。

zip([(1, 'a'), (2, 'b'), (3, 'c')])变成了zip((1, 'a'), (2, 'b'), (3, 'c'))了。

于是也就不难理解为什么能拆回来。

图示就是如下。

拆开result

实际上起到了unzip的作用了~

python还真是可愛い~

python拟人

exoticknight wechat
扫描关注公众号
Or buy me a coffee ☕ ?
  • 本文作者: exoticknight
  • 本文链接: https://blog.e10t.net/python-interesting-function-zip/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。图片以及多媒体资料,均属原作者或本人所有。禁止任何形式的转载!
  • 授权转载务必保留以上声明和二维码。