zoukankan      html  css  js  c++  java
  • 用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)
    
  • 相关阅读:
    mysql字符串连接,重复等字符串函数总结
    mysql字符串连接,重复等字符串函数总结
    mysql字符串连接,重复等字符串函数总结
    solr4.x设置默认查询字段
    一)如何开始 ehcache ?
    tomcat 配置图片服务器
    Cache Algorithms
    shiro 和 spring
    Tomcat 环境变量配置
    No cache or cacheManager properties have been set. Authorization cache cannot be obtained.
  • 原文地址:https://www.cnblogs.com/raddleoj/p/7596704.html
Copyright © 2011-2022 走看看