关于itertools.groupby()

itertools.groupby()就是将相邻的并且相同的键值划分为同一组,相似功能可以看https://docs.python.org/3/library/itertools.html?highlight=groupby#itertools.groupby写的groupby类

  1. >>> list_a
  2. ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'D', 'A', 'A', 'B', 'B', 'B']
  3. >>> for date, items in groupby(list_a):
  4. ... print('date: {}'.format(date))
  5. ... for item in items:
  6. ... print(item, end=" ")
  7. ... print("\n==========")
  8. ...
  9. date: A
  10. A A A A
  11. ==========
  12. date: B
  13. B B B
  14. ==========
  15. date: C
  16. C C
  17. ==========
  18. date: D
  19. D
  20. ==========
  21. date: A
  22. A A
  23. ==========
  24. date: B
  25. B B B
  26. ==========

是不是发现上述例子还有可简化之处,毕竟A的分组要都归为一组(这是因为存在不相邻的A才出现的情况):

  1. >>> list_a
  2. ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'D', 'A', 'A', 'B', 'B', 'B']
  3. >>> list_a.sort(key=lambda list: list) # 经过lambda匿名函数排序后,将相邻的元素放在一起
  4. >>> list_a
  5. ['A', 'A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'B', 'C', 'C', 'D']
  6. >>> for date, items in groupby(list_a):
  7. ... print('date: {}'.format(date))
  8. ... for item in items:
  9. ... print(item, end=" ")
  10. ... print("\n==========")
  11. ...
  12. date: A
  13. A A A A A A
  14. ==========
  15. date: B
  16. B B B B B B
  17. ==========
  18. date: C
  19. C C
  20. ==========
  21. date: D
  22. D
  23. ==========

除了使用lambda匿名函数之外,还可以使用operator.itemgetter()函数,效率比lambda更快一些,具体可以看《Python Cookbook》

关于itertools.compress(data, selectors)

根据传递进去的选择器进行判断是否保留数据

  1. >>> list1 = [1, 4, 7, 2, 98, 3, 6, 2]
  2. >>> list_TF = [0,1,0,1,1,1,0,0]
  3. >>> list_TF = [n ==1 for n in list_TF]
  4. >>> list_TF
  5. [False, True, False, True, True, True, False, False]
  6. >>> from itertools import compress
  7. >>> list(compress(list1, list_TF))
  8. [4, 2, 98, 3]

其实通过教程我们还可以发现compress是大致如下:

  1. >>> list1
  2. [1, 4, 7, 2, 98, 3, 6, 2]
  3. >>> list_TF
  4. [False, True, False, True, True, True, False, False]
  5. >>> [n for n,s in zip(list1, list_TF) if s]
  6. [4, 2, 98, 3]

如果觉得慢,还可以使用生成器来代替

itertools.groupby()/itertools.compress() 笔记的更多相关文章

  1. [PY3]——根据某个特定的字段来分组迭代访问一个字段或序列?/ itertools.groupby( )函数

    问题 你有一个字典或者实例的序列,然后你想根据某个特定的字段(比如‘date’)来分组迭代访问. 解决方案 itertools.groupby( )函数 itertools.groupby(rows, ...

  2. itertools.groupby()分组字典列表

    ## itertools.groupby()分组字典列表数据 from operator import itemgetter from itertools import groupby student ...

  3. Python中itertools.groupby分组的使用

    Python中itertools.groupby分组的使用 有时候我们需要给一个列表按照某个属性分组,可以借助groupby来实现. 比如:一下列表我想以严重程度给它分组,并求出每组的元素个数. fr ...

  4. Python中的字典分组函数(groupby,itertools)

    from operator import itemgetter # itemgetter用来去dict中的key,省去了使用lambda函数 from itertools import groupby ...

  5. python编程零碎积累

    例行程序 def routine():     lastday = ''     while True:         day = datetime.datetime.now().strftime( ...

  6. Python列表中去重的多种方法

    怎么快速的对列表进行去重呢,去重之后原来的顺序会不会改变呢? 去重之后顺序会改变 set去重 列表去重改变原列表的顺序了 l1 = [1,4,4,2,3,4,5,6,1] l2 = list(set( ...

  7. Python学习笔记—itertools模块

    这篇是看wklken的<Python进阶-Itertools模块小结> 学习itertools模块的学习笔记 在看itertools中各函数的源代码时,刚开始还比较轻松,但后面看起来就比较 ...

  8. python笔记之itertools模块

    python笔记之itertools模块 itertools模块包含创建有效迭代器的函数,可以用各种方式对数据进行循环操作,此模块中的所有函数返回的迭代器都可以与for循环语句以及其他包含迭代器(如生 ...

  9. Python标准库(1) — itertools模块

    简介 官方描述:Functional tools for creating and using iterators.即用于创建高效迭代器的函数. itertools.chain(*iterable) ...

随机推荐

  1. Flask源码阅读-第二篇(flask\__init__.py)

    源码: # -*- coding: utf-8 -*-""" flask ~~~~~ A microframework based on Werkzeug. It's e ...

  2. REST easy with kbmMW #21 – Delphi client stubs

    在之前的博文中,我提到新的存根生成器框架具有生成Delphi客户端存根所需的功能,使得开发Delphi智能客户端非常容易,完全支持编译时的类型检查和IDE类/属性帮助. 我没想到会把它包含在即将发布的 ...

  3. python day04 作业答案

    1. 1) li=['alex','WuSir','ritian','barry','wenzhou'] print(len(li)) 2) li=['alex','WuSir','ritian',' ...

  4. 豆瓣电影 Top 250

    import refrom urllib.request import urlopen def getPage(url): # 获取网页的字符串 response = urlopen(url) ret ...

  5. Linux大文件分割splite

    /********************************************************************** * Linux大文件分割splite * 说明: * 编 ...

  6. Cython 使用

    链接: Cython是一个快速生成Python扩展模块的工具,从语法层面上来讲是Python语法和C语言语法的混血,当Python性能遇到瓶颈时,Cython直接将C的原生速度植入Python程序,这 ...

  7. java list 的遍历

    import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.I ...

  8. 数据库设计画图工具powerdesigner

    powerdesigner 教程:http://jingyan.baidu.com/article/bea41d43684fa4b4c51be6cf.html

  9. HDU 2561

    F - 第二第二 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Prac ...

  10. 2017.4.7 Sprng MVC工作流程描述图

    图一: 图二: Spring工作流程描述         1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获:       2. Dispa ...