• 列表,字典,集合推导式


    8.1列表推导式

    优点:

    • 对于列表解析,编写起来更加精简,可在多种环境中是使用。
    • 列表解析比手动的for循环语句运行更快,因为他们的迭代在解释器内部是以C语言的速度执行的,而不是以python代码执行。

    基础语法:

    li = [1, 2, 3, 4, 5]
    a = [x + 10 for x in li]   
    # (x + 10)是循环变量,后面跟着循环变量的头部部分,它声明了循环对象,以及一个可迭代对象(for x in li)
     
    例一:30以内所有能被3整除的数
    multiples = [i for i in range(30) if i % 3 == 0]
    print(multiples)
    ---[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]

     例二:30以内所有能被3整除的数的平方

    def squared(x):
        return x*x
    
    multiples = [squared(i) for i in range(30) if i % 3 is 0]      #一个带有返回值的函数
    print(multiples)

     例三:找到嵌套列表中名字含有两个‘e’的所有名字

    names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
             ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
    
    print([name for lst in names for name in lst if name.count('e') >= 2])     #仔细观察语句顺序,不难理解
    ---['Jefferson', 'Wesley', 'Steven', 'Jennifer']

     例四:求M中3,6,9组成的列表M = [[1,2,3],[4,5,6],[7,8,9]]

    M = [[1,2,3],[4,5,6],[7,8,9]]
    a =[num for lst in M for num in lst if num % 3 == 0]
    print(a)
    ---[3, 6, 9]

     例五:打印从100,99,98到0的值

    a = [x for x in reversed(range(101))]
    print(a)
    ---[100, 99, 98, 97, 96---3,2,1,0]

    例六:求(x,y)其中x是0-5之间的偶数,y是0-5之间的奇数组成的元祖列表

    lst =[(x, y) for x in range(5) if x % 2 == 0 for y in range(6) if y % 2 == 1]
    print(lst)
    ---[(0, 1), (0, 3), (0, 5), (2, 1), (2, 3), (2, 5), (4, 1), (4, 3), (4, 5)]

     例七:

    y = 10
    
    for i in range(100):
        print(i*y) # 比较两者的差别
    
    l=[i*y for i in range(100)]
    print(l)

    例八:多层循环

    l = []
    for i in range(1, 10):
        for j in range(1, 10):
            s = i * j
            l.append(s)
    print(l)
    
    l = [i * j for i in range(1, 10) for j in range(1, 10)]  # 比较两者差别
    print(l)

    例九:文件中的使用

    lines = [line.rstrip() for line in
             open('xx.txt') if line[0] == 'p']  # 收集文本中以字母P开头的行
    print(lines)

    例十:输出[[0, 0, 0, 0, 0], [0, 1, 2, 3, 4], [0, 2, 4, 6, 8], [0, 3, 6, 9, 12]]

    ret = [[i*j for j in range(5)] for i in range(4)]
    print(ret)

    8.2字典推导式

    例一:将一个字典的key和value对调
    mcase = {'a': 10, 'b': 34}
    mcase_frequency = {mcase[k]: k for k in mcase}    # mcase[k],现在代表value值
    print(mcase_frequency)
    
    ---{10: 'a', 34: 'b'}

     例二:合并大小写对应的value值,将k统一成小写

    mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3}
    mcase_frequency = {k.lower(): mcase.get(k.lower(), 0) +
                                  mcase.get(k.upper(), 0) for k in mcase.keys()}    # 字典中get()函数,用于返回指定键的值,如果值不存在则返回默认值
    print(mcase_frequency)
    
    ---{'a': 17, 'b': 34, 'z': 3}

    8.3集合推导式

      例:计算列表中每个值的平方,自带去重功能    
    squared = {x**2 for x in [1, -1, 2]}
    print(squared)
    ---{1, 4}
    l=[5,-5,1,2,5]
    print({i**2 for i in l})
    ---{25,1,4}
  • 相关阅读:
    IDEA中项目编码格式设置
    font awesome 页面小图标
    ffmpeg无损MP4转TS 及bat批量脚本
    Mysql超百万数据的导入导出
    查询流水表中所有用户最后一条和第一条记录
    css样式实现网页全黑白
    jsp中二维码展示及异步轮询查询
    支付宝当面付对接
    微信native支付对接
    Java和python实现斐波那契数列的感触
  • 原文地址:https://www.cnblogs.com/LearningOnline/p/8463906.html
Copyright © 2020-2023  润新知