当前位置: 首页 > news >正文

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

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Created by weilai on 2016/12/28




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


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)

 

 

转载于:https://my.oschina.net/raddleoj/blog/813825

相关文章:

  • [NodeJS] 关于Buffer
  • GVIM中文乱码问题(文本及菜单乱码)
  • 从地狱到天堂,Node 回调向 async/await 转变
  • Android 5.0 全新的动画
  • tomcat报错
  • shell 循环语句应用实例
  • accept_mutex与性能的关系 (nginx)
  • MGW——美团点评高性能四层负载均衡
  • vue-router2.0 组件之间传参及获取动态参数
  • 电脑端下载今日头条的短视频
  • 分方式缓存常用的一致性hash是什么原理
  • webbench压力测试工具
  • 飞天5K实战经验:大规模分布式系统运维实践
  • 我的jQuery动态表格插件
  • ExcelReport第一篇:使用ExcelReport导出Excel
  • jQuery(一)
  • spring boot 整合mybatis 无法输出sql的问题
  • vue-loader 源码解析系列之 selector
  • 从零开始学习部署
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 后端_MYSQL
  • 今年的LC3大会没了?
  • 排序算法学习笔记
  • 前端面试题总结
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 入手阿里云新服务器的部署NODE
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 数据仓库的几种建模方法
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • postgresql行列转换函数
  • scrapy中间件源码分析及常用中间件大全
  • #pragma预处理命令
  • $.each()与$(selector).each()
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (Git) gitignore基础使用
  • (Python第六天)文件处理
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (编译到47%失败)to be deleted
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (一)Linux+Windows下安装ffmpeg
  • (转)IOS中获取各种文件的目录路径的方法
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .NET 5种线程安全集合
  • .NET MVC 验证码
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .Net接口调试与案例
  • .NET企业级应用架构设计系列之技术选型
  • .NET委托:一个关于C#的睡前故事
  • [BUG]Datax写入数据到psql报不能序列化特殊字符
  • [C++]priority_queue的介绍及模拟实现