• python之数据序列转换并同时计算数据


    问题

    你需要在数据序列上执行聚集函数(比如 sum() , min() , max() ), 但是首先你需要先转换或者过滤数据

    解决方案

    一个非常优雅的方式去结合数据计算与转换就是使用一个生成器表达式参数

    比如:

    import os
    
    files = os.listdir("testPackage")
    print(files)  # ['__init__.py', 'cookBook', 'secondPackage', 'cookBook.py'] 只会找testPackage 下面的一级文件夹及文件
    if any(name.endswith('.py') for name in files):
        print('There be python!')  # There be python!
    else:
        print('Sorry, no python.')
    
    s = ('ACME', 50, 123.45)
    print(','.join(str(x) for x in s))  # ACME,50,123.45

    优点使用一个生成器表达式作为参数会比先创建一个临时列表更加高效和优雅(不需要两个括号),而不是这样做

    举例一:

    nums = [1, 2, 3, 4, 5]
    s = sum([x * x for x in nums])
    print(s)  # 55
    
    # 最好的做法:
    nums = [1, 2, 3, 4, 5]
    s = sum(x * x for x in nums)
    print(s)  # 55

    举例二

    portfolio = [
        {'name': 'GOOG', 'shares': 50},
        {'name': 'YHOO', 'shares': 75},
        {'name': 'AOL', 'shares': 20},
        {'name': 'SCOX', 'shares': 65}
    ]
    print((s['shares'] for s in portfolio))  # <generator object <genexpr> at 0x7fd797fb8af0> 是个生成器
    min_shares = min(s['shares'] for s in portfolio)
    print(min_shares)  # 20
    
    # 也可以这么写
    min_shares = min(portfolio, key=lambda d: d["shares"])
    print(min_shares)  # {'name': 'AOL', 'shares': 20}

      

  • 相关阅读:
    innodb存储引擎监控
    Oracle 11g DATAGUARD 同步延时监控脚本
    查看表空间的增长情况
    linux上下键,rlwrap来解决
    命令模式彻底删除oracle实例
    oracle 11g 静默安装
    oracle表空间相关统计查询
    11gr2 alert日志中报TNS-12535 TNS-00505原因及解决方法
    ORACLE EXPIRED(GRACE)
    清理监听日志处理的方法
  • 原文地址:https://www.cnblogs.com/zzy-9318/p/10423167.html
Copyright © 2020-2023  润新知