zoukankan      html  css  js  c++  java
  • zip filter map 列表生成器

    map 

    map(function, list): 就是对list 中的每一个元素都调用function函数进行处理,返回一个map的对象

    list一下就可以生成一个列表

    或者for循环该对象就可以输出值

    c=[2,3,4,5,6]
    bb=list(map(lambda x:x+1,a))
    print(bb)
    [2, 3, 4, 5, 6]
    a=[1,2,3,4,5]
    c=[2,3,4,5,6]
    bb=list(map(lambda x,y:(x+1,y+1),a,c))
    print(bb)
    输出:
    其中x:y就是要输出的值对应了:后面的表达式
    [(2, 3), (3, 4), (4, 5), (5, 6), (6, 7)]
    dic=[{'id':1,'dd':'4'},{'id':2,'dd':'3'},{'id':3,'dd':'6'},]
    
    haha=list(map(lambda x:(x.get('id')),dic))
    
    print(haha)
    输出:
    [1, 2, 3]

    zip 

     zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同。利用*号操作符,可以将list unzip(解压)

    a = [1,2,3]
    b = [4,5,6]
    c = [4,5,6,7,8]
    zipped =list(zip(a,b))
    
    print(zipped)
    # [(1, 4), (2, 5), (3, 6)]
    
    print(list(zip(a,c)))
    #[(1, 4), (2, 5), (3, 6)]
    
    print(list(zip(*zipped)))
    #[(1, 2, 3), (4, 5, 6)]

    filter 

      filter(function, list): 对list中的每一个元素都调用function进行判断,返回满足条件的元素列表。感觉它跟map很像,是的,但也有细微的差别,看下面代码就知道了。

    #过滤符合条件的数据
    a=[1,2,3,4,5]
    data=list(filter(lambda x:x>2,a))
    print(data)  
    输出:[3, 4, 5]

    map是循环每个字段进行比较,得出的结果放在列表里:

    a=[1,2,3,4,5]
    data=list(map(lambda x:x>2,a))
    print(data)
    #输出[False, False, True, True, True]

    列表生成器

    当然我觉得列表生成器是很好用的工具

    他能够帮我快速的构建数据

    b=[1,2,3,4,5,6]
    a=[ row+1 for row in b]
    print(a)
    [2, 3, 4, 5, 6, 7]

    乍一看好像一样,但是如果你想对同一个数据构建两次呢?

    b=[1,2,3,4,5,6]
    a=[ (row+1,row*2) for row in b]
    print(a)
    [(2, 2), (3, 4), (4, 6), (5, 8), (6, 10), (7, 12)]
    
    ##############
    b=[1,2,3,4,5,6]
    a=[ [row+1,row*2] for row in b]
    print(a)
    [[2, 2], [3, 4], [4, 6], [5, 8], [6, 10], [7, 12]]
    b=[1,2,3]
    a=[ {'数值加1':row+1,'数值加2':row+2} for row in b]
    print(a)
    [{'数值加1': 2, '数值加2': 3}, {'数值加1': 3, '数值加2': 4}, {'数值加1': 4, '数值加2': 5}]

    这种对queryset的循环会很爽;

    # obj_list=[obj,obj,obj]
    
    # result=[ obj.id for obj in obj_list]
    
    # result=[ {'id':obj.id,'title':obj.title} for obj in obj_list]
    values=[{'id':1,'title':'哈哈11'},{'id':2,'title':'哈哈2'},{'id':3,'title':'哈哈33'},]
    
    dic = [{'id':row['id']} for row in values]
    
    print(dic)
    #[{'id': 1}, {'id': 2}, {'id': 3}]

    当然还可以构造字典格式的:

    values=[{'id':1,'title':'哈哈11'},{'id':2,'title':'哈哈2'},{'id':3,'title':'哈哈33'},]
    
    dic = {row['id']: row  for row in values}
    
    # dic = {row['id']:{'id':row['id'],'title':row['title']}  for row in values}
    #两种表达其实都一样
    
    print(dic)
    #{1: {'id': 1, 'title': '哈哈11'}, 2: {'id': 2, 'title': '哈哈2'}, 3: {'id': 3, 'title': '哈哈33'}}
  • 相关阅读:
    C# 控制反转(IOC: Inverse Of Control) & 依赖注入(DI: Independence Inject)
    英语常见短语汇总001
    ASP.Net Web.config 中引用外部config文件
    CSS样式汇总
    RSA非对称加密算法
    排序算法【2】——快速排序
    cmake引入boost
    boost之algorithm
    tar命令
    欧拉定理
  • 原文地址:https://www.cnblogs.com/chenxuming/p/9398249.html
Copyright © 2011-2022 走看看