当前位置:首页 > 数码 > Itertools方法-助你事半功倍-十大Python (itertools)

Itertools方法-助你事半功倍-十大Python (itertools)

admin5个月前 (05-01)数码17

Python 的编程优势之一在于其简洁性。这不仅是因为 Python 语法优雅,还因为它有许多精心设计的内置模块,可以帮助开发者高效地实现常用功能。itertools 模块就是一个很好的例子,它为开发者提供了许多强大的工具,可以用更短的代码来操作 Python 的可迭代对象,帮助开发者事半功倍地完成任务。

1. itertools.product():避免嵌套循环的巧妙方式

当程序变得越来越复杂时,可能需要编写嵌套循环。与此同时,Python 代码将变得丑陋和难以阅读:

```python list_a = [1, 2020, 70] list_b = [2, 4, 7, 2000] list_c = [3, 70, 7] for a in list_a: for b in list_b: for c in list_c: if a + b + c == 2077: print(a, b, c) 70 2000 7 ```

如何改进上述代码,使其具有 Python 风格?可以使用 itertools.product() 函数:

```python from itertools import product list_a = [1, 2020, 70] list_b = [2, 4, 7, 2000] list_c = [3, 70, 7] for a, b, c in product(list_a, list_b, list_c): if a + b + c == 2077: print(a, b, c) 70 2000 7 ```

如上所示,itertools.product() 函数返回输入可迭代对象的笛卡尔积,帮助将 3 个嵌套的 for 循环合并为一个。

2. itertools.compress():过滤数据的便捷方式

可以通过一个或多个循环来过滤列表中的项目。但有时候,可能不需要编写任何循环,而是使用函数 itertools.compress()。

itertools.compress() 函数返回一个迭代器,该迭代器根据对应的布尔掩码值对可迭代对象进行过滤。例如,以下代码使用 itertools.compress() 函数选择真正的数据:

```python import itertools leaders = ["Yang", "Elon", "Tim", "Tom", "Mark"] selector = [1, 1, 0, 0, 0] print(list(itertools.compress(leaders, selector))) ['Yang', 'Elon'] ```

第二个参数 selector 作为一个掩码,也可以定义为以下形式:

```python selector = [True, True, False, False, False] ``` 十大Python

3. itertools.groupby():对可迭代对象进行分组

itertools.groupby() 函数是将可迭代对象中相邻的重复元素进行分组的一种便捷方式。例如,可以对一个长字符串进行如下分组:

```python from itertools import groupby for key, group in groupby("YAaANNGGG"): print(key, list(group)) Y [Y] A [A] a [a] A [A] N [N, N] G [G, G, G] ```

还可以利用它的第二个参数来告诉 groupby() 函数如何判断两个元素是否相同:

```python from itertools import groupby for key, group in groupby("YAaANNGGG", lambda x: x.upper()): print(key, list(group)) Y [Y] A [A, a, A] N [N, N] G [G, G, G] ```

4. itertools.combinations():获取可迭代对象中给定长度的所有组合

对于初学者来说,编写一个正确的函数来获取列表的所有可能组合可能需要一些时间。实际上,如果使用 itertools.combinations() 函数,可以很容易地实现:

```python import itertools author = ["Y", "a", "n", "g"] result = itertools.combinations(author, 2) for combination in result: print(combination) ('Y', 'a') ('Y', 'n') ('Y', 'g') ('a', 'n') ('a', 'g') ('n', 'g') ```

5. itertools.permutations():获取可迭代对象中所有可能的排列

与 itertools.combinations() 函数类似,itertools.permutations() 函数可以获取可迭代对象中所有可能的排列。与 itertools.combinations() 函数不同的是,itertools.permutations() 函数考虑元素的顺序:

```python import itertools author = ["Y", "a", "n", "g"] result = itertools.permutations(author, 2) for permutation in result: print(permutation) ('Y', 'a') ('Y', 'n') ('Y', 'g') ('a', 'Y') ('a', 'n') ('a', 'g') ('n', 'Y') ('n', 'a') ('n', 'g') ('g', 'Y') ('g', 'a') ('g', 'n') ```

6. itertools.infinite_iterators:生成无限迭代器

itertools.infinite_iterators 模块提供了一系列函数,可以生成无限序列。例如,itertools.count() 函数可以生成一个从给定值开始的无限整数序列:

```python import itertools for number in itertools.count(1): print(number) 1 2 3 4 5 ... ```

itertools.cycle() 函数可以生成一个无限循环序列,该序列重复给定的可迭代对象:

```python import itertools for item in itertools.cycle([1, 2, 3]): print(item) 1 2 3 1 2 3 ... ```

结论

itertools 模块是 Python 中一个强大的工具,可以帮助开发者高效地操作可迭代对象。通过使用 itertools 模块中的函数,开发者可以避免编写冗长的循环和条件语句,从而写出更简洁、更优雅的 Python 代码。


在python中如何使用注释

python中的注释有多种,有单行注释,多行注释,批量注释,中文注释也是常用的。

一、python单行注释符号(#):井号(#)常被用作单行注释符号,在代码中使用#时,它右边的任何数据都会被忽略,当做是注释。print 1 #输出1,#号右边的内容在执行的时候是不会被输出的。

二、批量、多行注释符号:在python中也会有注释有很多行的时候,这种情况下就需要批量多行注释符了。多行注释是用三引号 包含的。

python正则表达式的注释方法:学过正则都知道,那简直是天书,为了提高正则的可读性,正则表达式中提供了X(VERBOSE): 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。

是完全面向对象的语言。函数、模块、数字、字符串都是对象。并且完全支持继承、重载、派生、多继承,有益于增强源代码的复用性。Python支持重载运算符和动态类型。

相对于Lisp这种传统的函数式编程语言,Python对函数式设计只提供了有限的支持。有两个标准库(functools, itertools)提供了Haskell和Standard ML中久经考验的函数式程序设计工具。

python中怎样让数据列转置

需求:你需要转置一个二维数组,将行列互换.讨论:你需要确保该数组的行列数都是相同的.比如:arr = [[1, 2, 3], [4, 5, 6], [7,8, 9], [10, 11, 12]]列表递推式提供了一个简便的矩阵转置的方法:print [[r[col] for r in arr] for col in range(len(arr[0]))][[1, 4, 7, 10], [2, 5, 8, 11],[3, 6, 9, 12]]另一个更快和高级一些的方法,可以使用zip函数:print map(list,zip(*arr))本节提供了关于矩阵转置的两个方法,一个比较清晰简单,另一个比较快速但有些隐晦.有时候,数据到来的时候使用错误的方式,比如,你使用微软的ADO接口访问数据库,由于Python和MS在语言实现上的差别方法在Python中可能返回的是列值,和方法的名称不同.本节给的出的方法就是这个问题常见的解决方案,一个更清晰,一个更快速.在列表递推式版本中,内层递推式表示选则什么(行),外层递推式表示选择者(列).这个过程完成后就实现了转置.在zip版本中,我们使用*arr语法将一维数组传递给zip做为参数,接着,zip返回一个元组做为结果.然后我们对每一个元组使用list方法,产生了列表的列表(即矩阵).因为我们没有直接将zip的结果表示为list,所以我们可以我们可以使用来稍微的提高效率(因为izip并没有将数据在内存中组织为列表) itertoolsprint map(list,(*arr))但是,在特定的情况下,上面的方法对效率的微弱提升不能弥补对复杂度的增加.关于*args和**kwds语法:*args(实际上,*号后面跟着变量名)语法在Python中表示传递任意的位置变量,当你使用这个语法的时候(比如,你在定义函数时使用),Python将这个变量和一个元组绑定,并保留所有的位置信息,而不是具体的变量.当你使用这个方法传递参数时,变量可以是任意的可迭代对象(其实可以是任何表达式,只要返回值是迭代器).**kwds语法在Python中用于接收命名参数.当你用这个方式传递参数时,Python将变量和一个dict绑定,保留所有命名参数,而不是具体的变量值.当你传递参数时,变量必须是dict类型(或者是返回值为dict类型的表达式).如果你要转置很大的数组,使用Numeric Python或其它第三方包,它们定义了很多方法,足够让你头晕的.相关说明:zip(...)zip(seq1 [,seq2 [...]]) -> [(seq1[0], seq2[0] ...),(...)]Return alist of tuples, where each tuple contains the i-th elementfrom each ofthe argument sequences. The returned list is truncatedin length tothe length of the shortest argument sequence.

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: Python

“Itertools方法-助你事半功倍-十大Python (itertools)” 的相关文章

Python中的LEGB规则 (python怎样打开)

Python中的LEGB规则 (python怎样打开)

Python 中的 LEGB 规则决定了变量和函数的作用域解析顺序。它代表了四个作用域层级: 局部作用域 闭包函数外的函数 全局作用域 内置作用域...

b-b-个入门建议!-Python-技术书籍推荐-附赠-11 (b+b+b等于什么)

b-b-个入门建议!-Python-技术书籍推荐-附赠-11 (b+b+b等于什么)

近年来,Python 持续火爆,越来越多的人开始入门学习 Python。RealPython 作为最受好评的 Python 学习网站,拥有超百万的浏览量,以下是 RealPython 的开发者给...

处置日常义务的终极工具!-Python-文件读写实战 (处置行为是什么意思)

处置日常义务的终极工具!-Python-文件读写实战 (处置行为是什么意思)

/target=_blankclass=infotextkey>Python文件的读写操作时,有很多须要思考的细节,这包含文件关上形式、读取和写入数据的方法、意外处置等。 在本文中,...

Python中的Random模块-摸索随机性的神奇环球 (python编程)

Python中的Random模块-摸索随机性的神奇环球 (python编程)

随机性在计算机编程和数据迷信中表演着至关关键的角色。/target=_blankclass=infotextkey>Python中的random模块提供了丰盛的工具和函数,协助咱们生成随机数...

惰性求值和lambda表达式的强大组合-Python高级技巧 (惰性求值和逻辑短路)

惰性求值和lambda表达式的强大组合-Python高级技巧 (惰性求值和逻辑短路)

Lambda 表达式 在 Python 中,Lambda 表达式是一个匿名函数,它可以在需要函数对象的地方使用。Lambda 表达式的语法如下: lambda arguments: exp...

掌握网络世界的无限可能-Python分布式爬虫助力搜索引擎打造 (掌握网络世界的好处)

掌握网络世界的无限可能-Python分布式爬虫助力搜索引擎打造 (掌握网络世界的好处)

主从模式 主从模式是一种简单的分布式爬虫架构,其中一台主机作为控制节点,负责管理所有运行爬虫的从机。 主节点负责向从机分配任务,并接收新生成的任务。从机只需要从主节点接收任务,并把新生...

轻松把握多线程和多进程-Python编程进阶 (多线是什么意思)

轻松把握多线程和多进程-Python编程进阶 (多线是什么意思)

1、简介 咱们将讨论如何应用/target=_blankclass=infotextkey>Python口头多线程和多进程义务。它们提供了在单个进程或多个进程之间口头并发操作的方法。并...

生成-UUID-操作-Python-齐全指南-格局和经常出现疑问 (生成uuid java)

生成-UUID-操作-Python-齐全指南-格局和经常出现疑问 (生成uuid java)

UUID(UniversallyUniqueIdentifier,通用惟一标识符)是一种全局惟一标识符生成形式,用于创立举世无双的标识符。/target=_blankclass=infotextk...