Python编程的9个实用技巧

图片[1]-Python编程的9个实用技巧-山海云端论坛

引言

在本文中,我们将分享一些在Python生态系统中提高编程效率的实用技巧。大部分技巧都是使用标准库中的功能,而其他一些则涉及一些第三方库。

在深入了解本文内容之前,让我们先回顾一下Python中迭代器(Iterables)的概念。

根据Python标准文档的定义,迭代器的概念如下:

迭代器是一种能够一次返回一个成员的对象。

迭代器的示例包括:

  • 所有序列类型(如list、str和tuple)
  • 一些非序列类型,如dict、文件对象以及类的实现中定义了__iter__()方法

迭代器是一个需要我们牢记的概念,因为接下来我们展示的许多技巧都使用了itertools包。itertools模块提供了一些函数,用于对迭代器对象进行操作,而不仅仅是逐个处理对象。

Trick 1

在工作和学习中,我们经常需要使用一个简单的函数来从一个列表生成新的列表、集合或字典。在这种情况下,我们可以利用迭代器的概念。举例来说:

  • 生成列表:
<code>names = ['John', 'Bard', 'Jessica', 'Andres'] lower_names = [name.lower() for name in names]</code>
  • 生成集合:
<code>names = ['John', 'Bard', 'Jessica', 'Andres'] lower_names = {name.lower() for name in names}</code>
  • 生成字典:
<code>names = ['John', 'Bard', 'Jessica', 'Andres'] lower_names = {name: name.lower() for name in names}</code>

个人建议:仅当for语句、函数调用和方法调用的数量较少时使用。

Trick 2

有时,我们需要获取两个列表对象之间的所有可能组合。我们可以使用嵌套的for循环来实现,但更简洁的方法是使用itertools提供的product函数。示例:

<code>from itertools import product l1 = [1, 2, 3] l2 = [4, 5, 6] combinations = product(l1, l2)</code>

Trick 3

有时我们需要在一个元素列表中比较或应用一些操作,以形成相邻元素的对。这被称为“滑动窗口”。我们可以使用itertools中的tee函数来实现这一点。示例:

<code>from itertools import tee def window2(iterable): it, offset = tee(iter(iterable)) next(offset) return zip(it, offset) l = [1, 2, 3, 4, 5, 6] dd = window2(l) for a in dd: print(a)</code>

Trick 4

有时我们希望创建一个类来存储信息,但是如果觉得创建一个类并定义其__init__()方法太麻烦,可以使用dataclass。示例:

<code>from dataclasses import dataclass @dataclass class Person: name: str age: int address: str person = Person(name='John', age=12, address='Nanjing Street')</code>

dataclass会为我们创建一个具有默认构造函数的类,该类接收相应字段的赋值,并且会自动生成特殊方法,如__str____repr____eq__等。

Trick 5

有时我们希望将一个对象上的操作视为tuple上的操作。我们可以使用collections.namedtuple实现这一点。示例:

<code>from typing import NamedTuple class Coordinate(NamedTuple): x: int y: int coordinate = Coordinate(10, 15) print(coordinate.x == coordinate[0]) # True print(coordinate.y == coordinate[1]) # True</code>

Trick 6

如果我们有一个dataclass,需要验证输入数据是否符合类型注释,可以使用第三方软件包pydantic。示例:

<code>from pydantic.dataclasses import dataclass @dataclass class Person: name: str age: int address: str</code>

Pydantic在运行时强制执行类型提示,并在数据无效时提供友好的错误提醒。

Trick 7

有时我们需要生成一些容器中元素频率的基本统计信息。在这种情况下,可以使用标准库中的Counter。示例:

<code>from collections import Counter l = [1, 1, 2, 3, 4, 4] frequencies = Counter(l) print(frequencies[1]) # Output: 2 print(frequencies[2]) # Output: 1 print(frequencies[2323]) # Output: 0</code>

Counter还提供了一些其他方法,如most_common,用于检索最常见的元素。

Trick 8

如果我们想对两个列表中的元素对进行相应的函数处理,可以使用map函数。示例:

<code>l1 = [1, 2, 3] l2 = [4, 5, 6] map(f, l1, l2)</code>

Trick 9

有时我们需要从一个列表中随机选择一个或多个元素,可以使用random.choicerandom.choices。示例:

<code>from random import choice, choices l = [1, 2, 3] random_element = choice(l) l = [1, 2, 3, 4, 5] random_elements = choices(l, k=3)</code>

参数k表示选择的元素个数。

总结

本文重点介绍了Python中9个与迭代相关的实用技巧,这些技巧可以方便地提高编程效率。

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容