90.zip函数。
今天我们来讲一下Python的另一个内置函数zip函数。zip函数定义如图所示,它有两种参数。
·第一种参数就是前面*iterables,它的含义是可以接0个到多个可迭代的对象。
·第二个参数strict,它的默认值是false,它用来要求传入这函数的所有的可迭代对象里边的元素是不是严格限制数量相等,默认是false就是不严格限制,如果改为True就会严格限制。
zip函数的作用是把所有的可迭代对象里边相同位置的元素摘出来放到同一个元组当中,然后依次的返回。
我们通过一个小例子来看一下,我们把这两个列表传入到zip当中,然后打印一下它的返回值,我们还需要把zip的返回值转换成列表形式展示出来,否则我们就只会展示出来一个zip的函数名字。
打印完了之后,大家可以看到它是把两个列表的相同位置的元素放在一个元组当中返回回来。如果我们需要用到for循环,它每一次迭代就会返回相同位置的元素。我们这时用的默认参数是strict等于false,这个等于false就是不强制所有的可迭代对象的长度都是相同的。
所以这里我们先把这里改成三个元素,再执行一下,可以看到它的迭代就到最短的可迭代对象为止,1的d就没有被给带出来。如果这里改成strict等于true就会报错,它会告诉我们这里边的ARGUMENT2 shorter than,ARGUMENT1就说LIST2的长度比LIST1长度要小,这时我们再恢复成4,它就正常执行了。
这是我们展示出来zip函数返回值的内容。
那我们如何通过for循环来做这种事情?假如我们需要把这个作为key,把这个作为值存到一个字典里边,我们先定一个字典forkey和valueindipl1,this is2,那在字典里面添加元素是DICT等于b2。
我们再打印一下这个字典,可以看到它通过循环把dict进行了元素的填充,填充到最后的结果就是变成是a,它是从list的毅力取出来的,值是1,它是从list2里取出来的,每一次取出两个可见对象相同位置的元素进行操作。
·这里再增加一个list3,因为zip函数我最开始说过了,它可以传入0到多个的可迭代对象。这里定一个list3,再把list3放到里面去。
·list3怎么用?这样DICT key对应的值也变成一个字典,它的值就是v,这里叫做v1。
·再打印一下DICT1,可以看到它同样的把所有的可迭代对象相同位置的元素取出来一起操作。第一个元素它的a是k,来自LIST3,它的v是一,来自LIST3,而它的V1是#号,来自LIST3,依此类推,这就是zip函数的用法。
这节课就讲到这里,来总结一下,zip函数有两个参数。
·第一个参数允许传入0个到多个可迭代对象。
·第二个参数strict默认是false,它的作用是是否要求传入的可迭代对象拥有相同个数的元素。如果是false就严格限制,如果是false就不严格限制,如果不严格限制则遍历只到元素最短的那个可迭代对象。如果严格限制就必须要把所有的可迭代对象的个数保持相同,否则就会报错。
下节课来讲一下,如果传入的可迭代对象个数不同,而且还不想只循环到最短的那个元素,需要怎么做?