• 用python模仿c#的List<>一组list筛选扩展方法


    说明:有些地方找不到就抛错了,实际上不算合理,请自行斟酌!

    另外可以举一反三,扩展很多小功能。

    很多小功能,能再一定程度提高开发效率

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # Created by weilai on 2016/12/28
    
    
    
    # 查找单个 lambda 表达式真的单个结果
    def find(data_list, find_lambda):
        if not isinstance(data_list, list):
            return
        for item in data_list:
            if find_lambda(item):
                return item
        return None
    
    # 首个,没有就报错
    def first(data_list, find_lambda):
        if not isinstance(data_list, list):
            raise Exception('it is not list')
        for item in data_list:
            if find_lambda(item):
                return item
        raise Exception('not find')
    
    # 查找全部
    def find_all(data_list, find_lambda):
        if not isinstance(data_list, list):
            raise Exception('it is not list')
        temp_list = []
        for item in data_list:
            if find_lambda(item):
                temp_list.append(item)
        return temp_list
    
    # 类似c#的select方法
    def select(data_list, select_lambda):
        if not isinstance(data_list, list):
            raise Exception('it is not list')
        temp_list = []
        for item in data_list:
            field = select_lambda(item)
            temp_list.append(field)
        return temp_list
    
    #
    def select_many(data_list, select_lambda):
        if not isinstance(data_list, list):
            raise Exception('it is not list')
        temp_list = []
        for item in data_list:
            fields = select_lambda(item)
            temp_list.append(fields)
        return temp_list
    
    # 统计和
    def sum(data_list, sum_lambda):
        if not isinstance(data_list, list):
            raise Exception('it is not list')
        temp = None
        for item in data_list:
            field = sum_lambda(item)
            temp += field
        return temp
    
    # 最大值
    def max(data_list, func):
        if not isinstance(data_list, list):
            raise Exception('it is not list')
        if len(data_list) <= 0:
            raise Exception('list no item')
        data_list.sort(key=func)
        temp = data_list[-1]
        return temp
    
    # 最小值
    def min(data_list, func):
        if not isinstance(data_list, list):
            raise Exception('it is not list')
        if len(data_list) <= 0:
            raise Exception('list no item')
        data_list.sort(key=func)
        temp = data_list[0]
        return temp
    
    # 是否存在
    def exists(data_list, equals_lambda):
        if not isinstance(data_list, list):
            raise Exception('item type not equals')
        for item in data_list:
            if equals_lambda(item):
                return True
        return False
    
    # 相等,这个 很可能不严密。谨慎使用
    def equals(item1, item2):
        if item1 == item2:
            return True
        return False
    
    # 好像是提取不同
    def distinct(data_list, equals_lambda):
        if not isinstance(data_list, list):
            raise Exception('it is not list')
        temp = []
        for x in data_list:
            has = False
            for y in temp:
                if equals_lambda(x, y):
                    has = True
                    break
            if not has:
                temp.append(x)
        return temp
    
    # 分组
    def group_by(data_list, item_lambda):
        if not isinstance(data_list, list):
            raise Exception('it is not list')
        temp = []
        fin_temp = []
        for x in data_list:
            has = False
            for y in temp:
                if y == item_lambda(x):
                    has = True
                    break
            if not has:
                temp.append(item_lambda(x))
        for t in temp:
           fin_temp.append((t, find_all(data_list, lambda m: item_lambda(m) == t)))
        return fin_temp
    
    # 测试
    L = [('b', 1), ('a', 2), ('c', 4), ('c', 3)]
    L.sort(key=lambda x: x[0])
    print(find_all(L, lambda x:x[0] == 'a'))
    print(distinct(L, lambda x, y: x[0] == y[0]))
    print(group_by(L, lambda x: x[0]))
    print(L)
    
  • 相关阅读:
    vue使用laydate.js插件报错laydate.css: Invalid
    自定义css样式结合js控制audio做音乐播放器
    福利福利~262集前端免费视频!
    解决Vue在IE中报错出现不支持=>等ES6语法和“Promise”未定义等问题
    设置Chart.js默认显示Point点的值不用鼠标经过才显示
    js监听某个元素高度变化来改变父级iframe的高度
    Vue中注意target和currentTarget的使用
    VUE中让由全局变量添加生成的新数组不随全局变量的变化而变化
    bootstrap-table前端实现多条件时间段查询数据
    js小数点相乘或相除出现多位数的问题
  • 原文地址:https://www.cnblogs.com/raddleoj/p/7596704.html
Copyright © 2020-2023  润新知