【新人系列】Python 入门(二十九):常用标准库 - 下

✍ 个人博客:https://blog.csdn.net/Newin2020?type=blog

📝 专栏地址:https://blog.csdn.net/newin2020/category_12801353.html

📣 专栏定位:为 0 基础刚入门 Python 的小伙伴提供详细的讲解,也欢迎大佬们一起交流~

📚 专栏简介:在这个专栏,我将带着大家从 0 开始入门 Python 的学习。在这个 Python 的新人系列专栏下,将会总结 Python 入门基础的一些知识点,方便大家快速入门学习~

❤️ 如果有收获的话,欢迎点赞 👍 收藏 📁 关注,您的支持就是我创作的最大动力 💪

4. itertools 模块

4.1 itertools 定义

官方文档:https://docs.python.org/zh-cn/3.7/library/itertools.html

编程中会用到很多需要迭代的地方,强大的 Python 已经为我们提供了 itertools 内置库,用来帮助开发人员更便捷的编码。

导入方式:

python 复制代码
import itertools

4.2 使用方法

  1. 迭代计数 - itertools.count()
python 复制代码
import itertools

# 计数:从 1 开始,按照步长为 2 的间距迭代至 100 为止
c = itertools.count(start=1, step=2)
for i in c:
    if i> 10:
        break
    else:
        print(i)
  1. 循环迭代 - itertools.cycle()
python 复制代码
import itertools

# itertools.cycle 传入一个可迭代对象,然后无限循环迭代
list1 = [1, 2, 3]
num = 0
for i in itertools.cycle(list1):
    print(i)
    num = num + 1
    if num == 7:
        break
  1. 重复迭代 - itertools.repeat()
python 复制代码
import itertools

# itertools.repeat 重复迭代一个可迭代对象,如果不指定 times,则会迭代无数次,也可以通过 times 参数指定迭代的次数
for i in itertools.repeat('hello world', 5):
    print(i)
  1. 拼接迭代器 - itertools.chain()
python 复制代码
import itertools

# itertools.chain 连接多个列表或者迭代器,把传入的多个 iterable 拼接一个迭代器,并且按传入顺迭代
list1 = [1, 2, 3]
list2 = ('a', 'b', 'c')
for i in itertools.chain(list1, list2):
    print(i)
  1. 排列组合 - itertools.permutations()
python 复制代码
import itertools

l1 = list(itertools.permutations([1, 2, 3]))
print(l1)
  1. 指定元素组合 - itertools.combinations()
python 复制代码
import itertools

# itertools.combinations 元素组合
list1 = [1, 2, 3, 4, 5]
x = itertools.combinations(list1, 2)
print(list(x))

# itertools.combinations_with_replacement 允许重复元素组合
x = itertools.combinations_with_replacement(list1, 2)
print(list(x))
  1. 求笛卡尔积 - itertools.product()
python 复制代码
import itertools

# itertools.product 用于求多个可迭代对象的笛卡尔积(Cartesian Product)
A = [1, 2, 3]
B = [100, 200, 300]
for item in itertools.product(A, B):
    print(item)

Tips:笛卡尔积、元素组合以及排列组合之间的区别

  1. 笛卡尔积:
  • 笛卡尔积是两个或多个集合中元素的所有可能有序对的集合。
  • 它强调的是不同集合之间元素的配对,并且顺序是重要的。
  • 例如,集合 A = {1, 2} 和集合 B = {a, b} 的笛卡尔积是 {(1, a), (1, b), (2, a), (2, b)}。
  1. 元素组合:
  • 组合是从给定的集合中选取一定数量的元素形成子集,不考虑元素的顺序。
  • 例如,从集合 {1, 2, 3} 中选取 2 个元素的组合有 {1, 2} 、{1, 3} 、{2, 3}。
  1. 排列组合:
  • 排列是从给定的集合中选取一定数量的元素进行排列,元素的顺序是重要的。
  • 例如,从集合 {1, 2, 3} 中选取 2 个元素的排列有 12、21、13、31、23、32。

总结来说,笛卡尔积是不同集合元素的配对;组合只关注选取的元素集合,不考虑顺序;排列则既关注选取的元素集合,又考虑元素的顺序。

5. collections 模块

5.1 collections 定义

官方文档:https://docs.python.org/zh-cn/3.7/library/collections.html

Collections 模块 -- Python 标准库,是数据结构常用模块。

导入方式:

python 复制代码
import collections

5.2 使用方法

  1. 计数功能
python 复制代码
from collections import *


# Counter 计数功能
list1 = ["a", "b", "c", "c", "a", "a"]
count = Counter(list1)
print(count)            # Counter({'a': 3, 'c': 2, 'b': 1})
print(count.keys())     # dict_keys(['a', 'b', 'c'])
print(count.values())   # dict_values([3, 1, 2])
print(count['a'])       # 3

# most_common,返回一个列表,包含 counter 中 n 个最大数目的元素
print(Counter("aabbcaedds").most_common())      # [('a', 3), ('b', 2), ('d', 2), ('c', 1), ('e', 1), ('s', 1)]
print(Counter("aabbcaedds").most_common(2))     # [('a', 3), ('b', 2)]
  1. 队列模拟

Deque 模块是 Python 标准库 collections 中的一项,它提供了两端都可以操作的序列,这意味着你可以在序列前后都执行添加或删除,并且可以限制队列容量。

常规操作:

python 复制代码
import collections

# 创建双向队列
d = collections.deque()

# deque 提供了类似 list 的操作方法
# 往右添加元素
d.append(1)
d.append(2)
print(d)     # deque([1, 2])

# 往左添加元素
d.appendleft(5)
print(d)     # deque([5, 1, 2])

# 在指定位置添加元素
d.insert(1, 'a')
print(d)     # deque([5, 'a', 1, 2])

# 获取最右边一个元素,并在队列中删除
x = d.pop()
print(x, d)  # 2 deque([5, 'a', 1])

限制队列最大长度:

python 复制代码
import collections

# 还可以显示 deque 的长度,当限制长度的 deque 增加超过限制数的项时,另一边的项会自动删除
d = collections.deque(maxlen=3)
d.append(1)
d.append(2)
d.append(3)
print(d)     # deque([1, 2, 3], maxlen=3)
d.append(4)
print(d)     # deque([2, 3, 4], maxlen=3)

6. inspect 模块

6.1 inspect 定义

官方文档:https://docs.python.org/zh-cn/3.7/library/inspect.html

inspect 模块用于收集 python 对象的信息,可以获取类或函数的参数的信息和源码、解析堆栈、对对象进行类型检查等。

导入方式:

python 复制代码
import insepct

inspect 模块主要提供了四种用处:

  • 对是否是模块、框架、函数进行类型检查
  • 获取源码
  • 获取类或者函数的参数信息
  • 解析堆栈

6.2 使用方法

  1. 获取源码
python 复制代码
import inspect
from unittest import TestCase

# 获取源码
def add(x, y):
    print('add function')
    return x + y

print(inspect.getsource(add))
print(inspect.getsource(TestCase))
  1. 获取函数路径及文档字符串
python 复制代码
import inspect

def add(x, y):
    "这是一个 add 函数"
    print('add function')
    return x + y

print(inspect.getsourcefile(add))   # /Users/Desktop/project/test_python/test/test.py
print(inspect.getdoc(add))          # 这是一个 add 函数
  1. 获取模块的所有类
python 复制代码
import inspect
import unittest

# 获取该模块的所有类
for name, obj in inspect.getmembers(unittest):
    """获取该模块的所有类"""
    if inspect.ismodule(obj):
        print('是否是一个模块:' + obj.__name__)
    if inspect.isclass(obj):
        print('是否是一个类:'+obj.__name__)
    if inspect.ismethod(obj):
        print('是否是一个方法:'+obj.__name__)

7. csv 模块

7.1 csv 定义

csv模块是用于处理逗号分隔值(Comma-Separated Values,CSV)文件的工具模块,使用场景如下:

  1. 数据导入和导出:当需要从外部数据源(如电子表格、数据库导出等)读取数据或将数据导出到其他应用程序时,CSV 格式通常是一种简单且广泛支持的格式。csv模块可以方便地读取和写入这些 CSV 文件,以便在 Python 程序中进行进一步的处理。
  2. 数据处理和分析:如果需要对大量的数据进行处理和分析,而这些数据以 CSV 格式存储,csv模块可以帮助快速读取数据,并进行各种操作,如筛选、转换、聚合等。可以使用 reader 和 writer 对象结合其他 Python 数据处理库来实现复杂的数据处理流程。
  3. 与其他工具和系统集成:许多其他软件工具和系统支持 CSV 格式作为输入或输出。通过使用 csv模块,Python 程序可以与这些工具进行交互,读取它们生成的 CSV 文件或生成 CSV 文件供它们使用。例如,可以将 Python 程序生成的数据导出为 CSV 文件,以便在电子表格软件中进行进一步的分析和可视化。

导入方式:

python 复制代码
import csv

另外,csv 和 excel 比较相似,但 csv 是纯文本格式,且结构简单仅存储数据,无格式和公式等,易被编程处理;而 excel 文件格式丰富,可含多个工作表及格式、公式、图表等,功能强大但相对复杂。

7.2 使用方法

  1. 写入文件
python 复制代码
import csv

header = ['姓名', '年纪', '国家']
data = [
    ['张三', 18, '中国'],
    ['李四', 19, '小日本'],
    ['王五', 20, '美国']
]

with open("data.csv", "w") as file:
    write = csv.writer(file)
    write.writerow(header)
    write.writerows(data)

执行上述代码后,会在本地创建一个 'data.csv' 文件,并往里面写入数据。

  1. 读取文件
python 复制代码
import csv

header = ['姓名', '年纪', '国家']
data = [
    ['张三', 18, '中国'],
    ['李四', 19, '小日本'],
    ['王五', 20, '美国']
]

with open("data.csv", "r") as file:
    reader = csv.reader(file)
    for row in reader:
        print(row)
相关推荐
刀客1236 分钟前
python3+TensorFlow 2.x(四)反向传播
人工智能·python·tensorflow
stevewongbuaa21 分钟前
一些烦人的go设置 goland
开发语言·后端·golang
撸码到无法自拔40 分钟前
MATLAB中处理大数据的技巧与方法
大数据·开发语言·matlab
Jackilina_Stone1 小时前
【论文阅读笔记】“万字”关于深度学习的图像和视频阴影检测、去除和生成的综述笔记 | 2024.9.3
论文阅读·人工智能·笔记·深度学习·ai
island13141 小时前
【QT】 控件 -- 显示类
开发语言·数据库·qt
sysu631 小时前
95.不同的二叉搜索树Ⅱ python
开发语言·数据结构·python·算法·leetcode·面试·深度优先
Ronin-Lotus1 小时前
上位机知识篇---CMake
c语言·c++·笔记·学习·跨平台·编译·cmake
SsummerC2 小时前
【leetcode100】从前序与中序遍历序列构造二叉树
python·算法·leetcode
hust_joker2 小时前
go单元测试和基准测试
开发语言·golang·单元测试
陌北v12 小时前
PyTorch广告点击率预测(CTR)利用深度学习提升广告效果
人工智能·pytorch·python·深度学习·ctr