Python 教程列表工具

小夏 科技 更新 2024-01-19

嗨,大家好!今天,我们将深入探讨 Python 中一些强大的列表工具,让您的编程之旅更加得心应手。

Python教程编程技巧

1.阵列模块

首先,我们来谈谈阵列模块。 该模块为我们提供了一个更紧凑、更高效的列表,特别适合存储相似的数据。 看看这个例子,我们可以存储双字节无符号二进制数字数组,而不是通常的 python int 对象列表:

from array import array

a = array('h', [4000, 10, 700, 22222])

print(sum(a))

输出: 26932

print(a[1:3])

输出:array('h', [10, 700])

输出

array('h', [10, 700])

解释

当我们使用from array import array导入数组模块后,我们可以创建一个数组对象,其构造函数的第一个参数是 type,它表示数组中元素的类型。 在这里'h'表示每个元素都是一个双字节无符号短整型(unsigned short),类型可以根据自己的需要选择,例如'i'表示有符号整数。

接下来,我们创建一个数组 a 并初始化一些值 [4000, 10, 700, 22222]。 此数组会将这些值存储为双字节无符号整数。

a = array('h', [4000, 10, 700, 22222])

然后,我们使用 sum(a) 对数组求和。 在这里,数组中的所有元素 (4000 + 10 + 700 + 22222) 将被汇总为 26932 的输出。

print(sum(a))

输出: 26932

最后,我们使用切片操作 a[1:3] 获取数组中索引从 1 到 2(不包括索引 3)的元素并输出它们。 此处的输出是一个新数组,其中包含索引为 1 到 2 [10, 700] 的原始数组的元素。

print(a[1:3])

输出:array('h', [10, 700])

总体而言,本节演示了如何创建和操作包含双字节数组模块。

无符号整数数组,通过求和和切片运算演示数组的灵活性和功能。 这在处理大量数值数据时非常有用,尤其是在需要更紧凑的存储和高性能时。

2.双端队列 (deque)。

接下来,让我们看一下双端队列,它是一个类似列表的对象,但在左侧的追加和弹出速度更快。 它非常适合实现队列和广度优先搜索

from collections import deque

def gen_moves(node):

为给定的字符串节点生成所有可能的子字符串。

moves =

for i in range(len(node)):

for j in range(i + 1, len(node) +1):

moves.append(node[i:j])

return moves

def is_goal(node):

在此示例中,目标状态是字符串长度为 5 的字符串。

return len(node) == 5

创建一个双端队列来表示待处理任务的列表。

d = deque(["task1", "task2", "task3"])

将是一项新任务"task4"添加到队列的尾部。

d.append("task4")

本节显示双端队列中任务的处理过程。

print("original task list:", d)

print("handling", d.popleft())

print("updated task list:", d)

定义起始节点。

starting_node = "initial_node"

创建包含起始节点的双端队列。

unsearched = deque([starting_node])

定义广度优先的搜索函数。

def breadth_first_search(unsearched):

队列左侧弹出一个节点。

node = unsearched.popleft()

移动当前节点。

for m in gen_moves(node):

如果达到目标状态,则返回结果。

if is_goal(m):

return m

将新节点添加到队列中。

unsearched.append(m)

演示广度优先搜索的过程。

print("unsearched nodes:", unsearched)

在广度优先搜索过程中,判断是否达到目标状态。

result = breadth_first_search(unsearched)

print("result of breadth-first search:", result)

输出

original task list: deque(['task1', 'task2', 'task3', 'task4'])

handling task1

updated task list: deque(['task2', 'task3', 'task4'])

unsearched nodes: deque(['initial_node'])

result of breadth-first search: initi

解释

is goal 函数检查字符串的长度是否等于 5,表示已达到目标状态。 在实际问题中,您需要根据搜索目标定义 is 目标函数,以确保它满足问题的要求。

3.二分模块

除了基本的列表操作之外,我们还有 bisect 模块,它提供了在排序列表中执行二进制查找的能力:

import bisect

scores = [(100, 'perl'), 200, 'tcl'), 400, 'lua'), 500, 'python')]

bisect.insort(scores, (300, 'ruby'))

print(scores)

输出:[100,.]'perl'), 200, 'tcl'), 300, 'ruby'), 400, 'lua'), 500, 'python')]

输出

[(100, 'perl'), 200, 'tcl'), 300, 'ruby'), 400, 'lua'), 500, 'python')]

解释

bisect.insort(scores, (300, 'ruby')):此行将添加元组(300,'ruby') 添加到排序后的分数列表中。insort 函数可确保列表在插入后保持排序状态。

print(scores):此行打印插入的分数列表。

请注意,新元组 (300,'ruby') 正确插入到乐谱中,并且列表仍按升序排序。此技术对于需要保持排序的动态数据集非常有用。

4.HEAPQ 模块

最后,让我们看一下 HEAPQ 模块,它提供了一个基于堆的通用列表。 这对于重复访问最小元素很有用,但您不想运行完整的列表排序:

from heapq import heapify, heappop, heappush

data = [1, 3, 5, 7, 9, 2, 4, 6, 8, 0]

heapify(data)

heappush(data, -5)

print([heappop(data) for i in range(3)])

输出:[5, 0, 1]。

输出

解释

heapify(data):此行使用 heapify 函数将列表数据转换为堆。 堆是一种特殊的树状数据结构,其中每个节点的值小于或等于其子节点的值。

heappush(data, -5):此行使用 heappush 函数将新元素 -5 推送到堆中。 这将保持堆的性质,即堆中任何节点的值小于或等于其子节点的值。

heappop(data) for i in range(3)]:此行使用列表推理,并在循环中执行 heappop(data) 三次,每次弹出堆中的最小元素。由于堆的性质,每个弹出的元素都是堆中的最小元素。

print(result):最后,打印结果,即前三个最小的元素。 输出为 [-5, 0, 1]。

这种使用堆的方法非常适合需要维护动态集合中最小元素的情况,因为在堆中插入和弹出最小元素的时间复杂度为 o(log n)。

这就是我们今天分享的关于 Python 列表工具的内容!希望这些工具能在您的编码之旅中为您提供帮助。 如果您有任何问题或想了解更多关于工具的信息,请在评论区发表评论,我会尽力回答。 记得点赞、分享、订阅,在编程的道路上与你同在!感谢您的收看,我们下期再见!

相似文章

    Python 编程示例 如何使用 return

    在Python编程语言中,return语句有一个非常重要的目的。它用于从函数返回值,以便在调用函数时获取结果。return 语句可用于多种数据类型,例如整数 浮点数 字符串 列表等。以下是如何使用 return 语句的一些示例 .返回一个整数 def add a,b result a b retur...

    详细循环的 Python 编程示例

    Python 中的 for 循环是一种常见的控制流语句,它允许您遍历序列 例如列表 元组 字典等 或其他可迭代对象来执行特定操作。在 Python 中,循环有很多用途,下面我将介绍其中的一些和示例。.遍历列表。您可以使用 for 循环遍历列表并对每个元素执行特定操作。例如,以下 将打印列表中的每个元...

    录音正常,但Siri无法录制?教程来了

    许多人在使用 Siri 时会遇到一个问题 即使录音功能正常工作,Siri 似乎也 听不到 自己的声音。这个问题可能是由多种原因引起的,下面我们将详细分析并提供相应的解决方案。检查录制权限 确保 Siri 有权访问设备的麦克风。在设备的设置中,找到 Siri 并确认麦克风权限已打开。如果未打开权限,S...

    教资会面试准考证以黑白或彩色打印

    一 引言。在准备教师资格证面试的过程中,准考证的打印是必不可少的一步。但是,我们需要考虑的是,在打印准考证时,是选择黑白还是彩色的问题。本文将重点讨论这一主题,并深入探讨以下几个方面 .入场券的有效期。首先,我们要明确一点,无论是黑白还是彩色,都不会影响准考证的有效期。这是因为准考证的主要信息,如考...

    在伊斯兰教的圣地,在无数人崇拜的“黑屋”里,有什么?

    在伊斯兰教中,一个神秘而庄严的地方吸引了无数信徒的目光和脚步 克尔白 这座城市位于沙特阿拉伯的麦加,不仅是伊斯兰教的发源地,也是每个穆斯林心中的圣地。每年,数以百万计的信徒聚集在这里朝圣。但是,这座简单的黑色方形建筑隐藏着什么样的秘密和力量,使它成为世界各地穆斯林崇拜的对象?麦加是一座见证伊斯兰教发...