广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python 迭代器工具包【推荐】
  • 400
分享到

Python 迭代器工具包【推荐】

工具包迭代Python 2022-06-04 19:06:31 400人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

  原文:https://git.io/pytips   0x01 介绍了迭代器的概念,即定义了 __iter__() 和 __next__() 方法的对象,或者通过 yield 简化定义的“可迭

  原文:https://git.io/pytips

  0x01 介绍了迭代器的概念,即定义了 __iter__() 和 __next__() 方法的对象,或者通过 yield 简化定义的“可迭代对象”,而在一些函数式编程语言(见 0x02 python 中的函数式编程)中,类似的迭代器常被用于产生特定格式的列表(或序列),这时的迭代器更像是一种数据结构而非函数(当然在一些函数式编程语言中,这两者并无本质差异)。Python 借鉴了 APL, Haskell, and SML 中的某些迭代器的构造方法,并在 itertools 中实现(该模块是通过 C 实现,源代码:/Modules/itertoolsmodule.c)。

  itertools 模块提供了如下三类迭代器构建工具:

  无限迭代

  整合两序列迭代

  组合生成器

  1. 无限迭代

  所谓无限(infinite)是指如果你通过 for...in... 的语法对其进行迭代,将陷入无限循环,包括:

  


count(start, [step])

  cycle(p)

  repeat(elem [,n])

  从名字大概可以猜出它们的用法,既然说是无限迭代,我们自然不会想要将其所有元素依次迭代取出,而通常是结合 map/zip 等方法,将其作为一个取之不尽的数据仓库,与有限长度的可迭代对象进行组合操作:

  


from itertools import cycle, count, repeat
print(count.__doc__)
  count(start=0, step=1) --> count object
  Return a count object whose .__next__() method returns consecutive values.
  Equivalent to:
  def count(firstval=0, step=1):
  x = firstval
  while 1:
  yield x
  x += step
  counter = count()
  print(next(counter))
  print(next(counter))
  print(list(map(lambda x, y: x+y, range(10), counter)))
  odd_counter = map(lambda x: 'Odd#{}'.fORMat(x), count(1, 2))
  print(next(odd_counter))
  print(next(odd_counter))

  0

  1

  [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

  Odd#1

  Odd#3

  print(cycle.__doc__)

  cycle(iterable) --> cycle object

  Return elements from the iterable until it is exhausted.

  Then repeat the sequence indefinitely.

  cyc = cycle(range(5))

  print(list(zip(range(6), cyc)))

  print(next(cyc))

  print(next(cyc))

  [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 0)]

  1

  2

  print(repeat.__doc__)

  repeat(object [,times]) -> create an iterator which returns the object

  for the specified number of times. If not specified, returns the object

  endlessly.

  print(list(repeat('Py', 3)))

  rep = repeat('p')

  print(list(zip(rep, 'y'*3)))

  ['Py', 'Py', 'Py']

  [('p', 'y'), ('p', 'y'), ('p', 'y')]

  2. 整合两序列迭代

  所谓整合两序列,是指以两个有限序列为输入,将其整合操作之后返回为一个迭代器,最为常见的 zip 函数就属于这一类别,只不过 zip 是内置函数。这一类别完整的方法包括:

 


 accumulate()

  chain()/chain.from_iterable()

  compress()

  dropwhile()/filterfalse()/takewhile()

  groupby()

  islice()

  starmap()

  tee()

  zip_longest()

  这里就不对所有的方法一一举例说明了,如果想要知道某个方法的用法,基本通过 print(method.__doc__) 就可以了解,毕竟 itertools 模块只是提供了一种快捷方式,并没有隐含什么深奥的算法。这里只对下面几个我觉得比较有趣的方法进行举例说明。

  


from itertools import cycle, compress, islice, takewhile, count

  # 这三个方法(如果使用恰当)可以限定无限迭代

  # print(compress.__doc__)

  print(list(compress(cycle('PY'), [1, 0, 1, 0])))

  # 像操作列表 l[start:stop:step] 一样操作其它序列

  # print(islice.__doc__)

  print(list(islice(cycle('PY'), 0, 2)))

  # 限制版的 filter

  # print(takewhile.__doc__)

  print(list(takewhile(lambda x: x < 5, count())))

  ['P', 'P']

  ['P', 'Y']

  [0, 1, 2, 3, 4]

  from itertools import groupby

  from operator import itemgetter

  print(groupby.__doc__)

  for k, g in groupby('AABBC'):

  print(k, list(g))

  db = [dict(name='python', script=True),

  dict(name='c', script=False),

  dict(name='c++', script=False),

  dict(name='ruby', script=True)]

  keyfunc = itemgetter('script')

  db2 = sorted(db, key=keyfunc) # sorted by `script'

  for isScript, langs in groupby(db2, keyfunc):

  print(', '.join(map(itemgetter('name'), langs)))

  groupby(iterable[, keyfunc]) -> create an iterator which returns

  (key, sub-iterator) grouped by each value of key(value).

  A ['A', 'A']

  B ['B', 'B']

  C ['C']

  c, c++

  python, ruby

  from itertools import zip_longest

  # 内置函数 zip 以较短序列为基准进行合并,

  # zip_longest 则以最长序列为基准,并提供补足参数 fillvalue

  # Python 2.7 中名为 izip_longest

  print(list(zip_longest('ABCD', '123', fillvalue=0)))

  [('A', '1'), ('B', '2'), ('C', '3'), ('D', 0)]

  3. 组合生成器

  关于生成器的排列组合: 


product(*iterables, repeat=1):两输入序列的笛卡尔乘积

  permutations(iterable, r=None):对输入序列的完全排列组合

  combinations(iterable, r):有序版的排列组合

  combinations_with_replacement(iterable, r):有序版的笛卡尔乘积

  from itertools import product, permutations, combinations, combinations_with_replacement

  print(list(product(range(2), range(2))))

  print(list(product('AB', repeat=2)))

  [(0, 0), (0, 1), (1, 0), (1, 1)]

  [('A', 'A'), ('A', 'B'), ('B', 'A'), ('B', 'B')]

  print(list(combinations_with_replacement('AB', 2)))

  [('A', 'A'), ('A', 'B'), ('B', 'B')]

  # 赛马问题:4匹马前2名的排列组合(A^4_2)

  print(list(permutations('ABCDE', 2)))

  [('A', 'B'), ('A', 'C'), ('A', 'D'), 
 ('A', 'E'), ('B', 'A'), ('B', 'C'), 
 ('B', 'D'), ('B', 'E'), ('C', 'A'), 
 ('C', 'B'), ('C', 'D'), ('C', 'E'), 
 ('D', 'A'), ('D', 'B'), ('D', 'C'), 
 ('D', 'E'), ('E', 'A'), ('E', 'B'), ('E', 'C'), ('E', 'D')]

  # 彩球问题:4种颜色的球任意抽出2个的颜色组合(C^4_2)

  print(list(combinations('ABCD', 2)))

  [('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'C'), ('B', 'D'), ('C', 'D')]

--结束END--

本文标题: Python 迭代器工具包【推荐】

本文链接: https://www.lsjlt.com/news/14973.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python 迭代器工具包【推荐】
      原文:https://git.io/pytips   0x01 介绍了迭代器的概念,即定义了 __iter__() 和 __next__() 方法的对象,或者通过 yield 简化定义的“可迭...
    99+
    2022-06-04
    工具包 迭代 Python
  • Python 官方推荐的一款打包工具
    点击上方“程序员大咖”,选择“置顶公众号”关键时刻,第一时间送达!在thoughtbot,我们用Ruby和Rails工作,但通常我们总是尝试使用最合适的语言或者框架来解决问题。我最近一直在探索机器学习技术,所以Python使用地更多。R...
    99+
    2023-01-31
    工具 官方 Python
  • 七种Python代码审查工具推荐
    目录1. DeepSource 2. Codacy3. SonarQube 4. Veracode 5. Checkmarx 6. Coverity 7. CodeScene 小结 ...
    99+
    2022-11-11
  • JavaHutool包工具类推荐ExcelUtil详解
    目录Java Hutool 包工具类推荐 ExcelUtil包引入一般简单表头Excel封装工具类复杂表头或表格内合并单元格写入总结Java Hutool 包工具类推荐 ExcelU...
    99+
    2022-11-13
  • 推荐七个Python效率工具!
    为了提高效率,我们在平时工作中常会用到一些Python的效率工具,Python作为比较老的编程语言,它可以实现日常工作的各种自动化。1、Pandas-用于数据分析Pandas是一个强大的分析结构化数据的工具集;它的使用基础是Numpy(提供...
    99+
    2023-05-14
    工具 Python
  • Java 打包同步工具推荐:哪些工具最实用?
    在 Java 开发中,打包和同步代码是非常常见的任务。对于一些大型项目来说,这些任务可能会消耗大量的时间和精力。为了提高效率和减少手动操作的错误,使用一些自动化的工具来完成这些任务是非常必要的。在本文中,我们将介绍几个 Java 打包同步...
    99+
    2023-06-20
    打包 同步 unix
  • GO语言中HTTP打包文件的工具推荐!
    随着互联网技术的不断发展,Web应用程序的需求不断增加,如何提高Web应用程序的性能和效率成为了程序员们的重要任务。在这个过程中,HTTP打包文件工具的使用变得越来越重要。本文将介绍GO语言中HTTP打包文件的工具推荐,并结合演示代码详细...
    99+
    2023-06-24
    http 打包 文件
  • 推荐几个好用的 Python 开发工具
    推荐几个好用的 Python 开发工具?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几乎...
    99+
    2023-06-08
  • Go代码检查的推荐工具及使用详解
    目录1. Golint2. Golangci-lint3. Go-reporter1. Golint (1)安装golint git clone htt...
    99+
    2022-11-11
  • PHP语言在线代码运行编译工具推荐
    PHP语言在线运行编译,是一款可在线编程编辑器,在编辑器上输入PHP语言代码,点击运行,可在线编译运行PHP语言,PHP语言代码在线运行调试,PHP语言在线编译,可快速在线测试您的PHP语言代码,在线...
    99+
    2023-09-08
    笔记
  • python-装饰器&生成器&迭代器&推
     一:普通装饰器 概念:在不改变原函数内部代码的基础上,在函数执行之前和之后自动执行某个功能,为已存在的对象添加某个功能 普通装饰器编写的格式 def 外层函数(参数) def 内层函数(*args,**kwargs) ...
    99+
    2023-01-31
    生成器 迭代 python
  • 新一代Python包管理工具
    目录1 简介2 使用pdm管理项目库环境2.1 pdm的安装2.2 pdm的基础使用1 简介 说起Python的包管理工具,大家第一时间想到的肯定是pip、conda等经典工具。但最...
    99+
    2022-11-13
  • 好程序员Python培训分享开发工具推荐
      好程序员Python培训分享开发工具推荐,很多Python学习者想必都会有如下感悟:最开始学习Python的时候,因为没有去探索好用的工具,吃了很多苦头。后来工作中深刻体会到,合理使用开发的工具的便利和高效。今天,我就把Python程序...
    99+
    2023-06-01
  • Python迭代工具有哪些及怎么使用
    今天小编给大家分享一下Python迭代工具有哪些及怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起...
    99+
    2022-10-19
  • Linux下9种优秀的代码比对工具推荐小结
    在我们编写代码的时候,我们经常需要知道两个文件之间,或者同一个文件不同版本之间有什么差异性。在 Windows 下有个很强大的工具叫作 BeyondCompare ,那在 Linux 下需要用到什么工具呢? 本文介绍...
    99+
    2022-06-03
    Linux 代码比对工具 Linux 码对比工具
  • Python Leetcode 刷题效率提升!实时调试工具推荐!
    随着人工智能的发展,人们越来越依赖于计算机来解决问题。在计算机科学领域,编程是必不可少的一部分。为了提高编程效率,需要使用一些工具来帮助我们更好地完成任务。在编程中,刷 Leetcode 是提高编程能力的一种有效途径。本文将介绍如何使用 ...
    99+
    2023-09-24
    leetcode 实时 windows
  • Python超简单容易上手的画图工具库推荐
    今天,在网上发现一款很棒的python画图工具库。很简单的api调用就能生成漂亮的图表。并且可以进行一些互动。 pyecharts 是一个用于生成 Echarts 图表的类库。Ech...
    99+
    2022-11-12
  • 推荐一款高效的python数据框处理工具Sidetable
    目录安装用法1、freq()2、Counts3、missing()4、subtotal()结论我们知道 Pandas 是数据科学社区中流行的 Python 包,它包含许多函数和方法来...
    99+
    2022-11-12
  • 推荐一个小而美的Python代码格式化工
    代码可读性是评判代码质量的标准之一,有一个衡量代码质量的标准是 Martin 提出的 “WFT” 定律,即每分钟爆出 “WTF” 的次数。你在读别人代码或者做 Code Review 的时候有没有 “WTF” 冲动呢?为了帮助开发者统一...
    99+
    2023-01-31
    小而 代码 格式
  • 一款Python工具制作的动态条形图(强烈推荐!)
    目录前言GitHub地址:方法如下总结 前言 大家好,说起动态条形图,之前推荐过两个 Python 库,比如Bar Chart Race、Pandas_Alive,都可以实...
    99+
    2023-02-16
    python动态条形图怎么做 python条形图代码 python画动态图代码
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作