zoukankan      html  css  js  c++  java
  • python zip()的使用

    zip()函数将可迭代的对象作为参数,将对象对应的元素打包成一个个元祖,然后返回由这些元祖组成的对象,我们可以使用list()转换成列表

    如果各个迭代器的元素个数不一致,则返回列表长度和最小的对象相同,用*好操作符,可以将元祖解压为列表

    1.两个或者多个list

    a=[1,2,3]
    b=[4,5,6]
    c=[7,8,9,10]    
    
    #两个list去zip()
    zip(a,b)
    
    #三个list去zip(),返回的对象的长度和最小的迭代器一致
    zip(a,b,c)
    
    #用list()查看zip后的数据
    list(zip(a,b))  #[(1, 4), (2, 5), (3, 6)]
    list(zip(a,b,c))  #[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
    
    #使用zip(*zip())解压
    a1,b1=zip(*zip(a,b))
    
    #两个list迭代输出
    for i,j in zip(a,b):
        print(i,j)
        
    输出:
    1 4
    2 5
    3 6

    2.如有两个list,一个是一层,一个是嵌套,要组成一个dict 

    #将zip对象转换成字典看看
    a=[1,2,3]
    d=[['a','b','c'],['aa','bb','cc'],['aaa','bbb','ccc']]
    
    dict(zip(a,d))  #{1: ['a', 'b', 'c'], 2: ['aa', 'bb', 'cc'], 3: ['aaa', 'bbb', 'ccc']}
    #如果一个是key值,一个内层list就是一行value
    [dict(zip(a,value)) for value in d]  #[{1: 'a', 2: 'b', 3: 'c'},
     {1: 'aa', 2: 'bb', 3: 'cc'},
     {1: 'aaa', 2: 'bbb', 3: 'ccc'}]
    
    #或者是    
    l=[]
    for value in d:
        dict={}
        for i in range(len(value)):
            dict[a[i]]=value[i]
        l.append(dict)
        

    3.同时遍历两个dict

    如果长度相同的dict直接用zip函数即可同时for
    如果长度不同,可以先把这两个dict整合进一个list再for

    dict_1=dict(zip(a,b))  #{1: 4, 2: 5, 3: 6}
    dict_2=dict(zip(a,d))  # {1: ['a', 'b', 'c'], 2: ['aa', 'bb', 'cc'], 3: ['aaa', 'bbb', 'ccc']}
    
    
    #key的遍历
    for i,j in zip(dict_1,dict_2):
        print(i,j)
    
    输出:
    1 1
    2 2
    3 3
    
    #values的遍历
    for i ,j in zip(dict_1.values(),dict_2.values()):
        print(i,j)
    输出:
    4 ['a', 'b', 'c']
    5 ['aa', 'bb', 'cc']
    6 ['aaa', 'bbb', 'ccc'] 
    
    #同时遍历,需要2个dict的value都是多层的
    dict_4=dict(zip(b,d))   #{4: ['a', 'b', 'c'], 5: ['aa', 'bb', 'cc'], 6: ['aaa', 'bbb', 'ccc']}
    for i,j in zip(dict_4,dict_2):
        for k in dict_4[i]:
            print(i,k)
        for m in dict_2[j]:
            print(j,m)
    
    输出:
    4 a
    4 b
    4 c
    1 a
    1 b
    1 c
    5 aa
    5 bb
    5 cc
    2 aa
    2 bb
    2 cc
    6 aaa
    6 bbb
    6 ccc
    3 aaa
    3 bbb
    3 ccc
  • 相关阅读:
    013.ES6 -对象字面量增强型写法
    012. ES6
    011. ES6 语法
    10. 9. Vue 计算属性的setter和getter 以及 计算属性的缓存讲解
    4. Spring MVC 数据响应方式
    3. SpringMVC 组件解析
    9. Vue 计算属性
    【洛谷 2984】给巧克力
    【洛谷 1821】捉迷藏 Hide and Seek
    【洛谷 1821】银牛派对Silver Cow Party
  • 原文地址:https://www.cnblogs.com/cgmcoding/p/13328867.html
Copyright © 2011-2022 走看看