Python数组(array)学习之旅:数据结构的奇妙冒险

news2025/4/14 16:13:32

Python数组学习之旅:数据结构的奇妙冒险

第一天:初识数组的惊喜

阳光透过窗帘缝隙洒进李明的房间,照亮了他桌上摊开的笔记本和笔记本电脑。作为一名刚刚转行的金融分析师,李明已经坚持学习Python编程一个月了。他的眼睛因为昨晚熬夜编程而微微发红,但脸上却挂着期待的微笑。今天,他决定探索数据结构的新领域。

"处理10,000个股票价格数据时,为什么程序会这么慢呢?"李明揉了揉太阳穴,疑惑地看着他的代码。屏幕上,一个简单的循环函数正在缓慢地处理着他收集的过去五年某支股票的每日收盘价。

就在这时,他的手机震动起来。是他的编程导师王教授发来的消息:

“遇到瓶颈了?考虑尝试一下Python的array模块。在处理大量同类型数据时,array比list更高效哦!”

李明的眼睛一亮。他立即打开浏览器,搜索关于Python array的资料。他快速敲击键盘,测试着新发现的知识:

import array

# 创建一个浮点数数组
stock_prices = array.array('d')  # 'd'表示双精度浮点数

# 添加一些股票价格数据
stock_prices.append(142.58)
stock_prices.append(143.75)
stock_prices.append(144.32)

print(stock_prices)  # 输出:array('d', [142.58, 143.75, 144.32])

看着屏幕上输出的结果,李明若有所思。与普通列表不同,array要求所有元素必须是相同类型的。这看起来是一个限制,但实际上是它高效运行的关键原因之一。

他关掉电脑,拉上窗帘,躺在床上。但他的大脑并没有停止运转——他已经迫不及待地想要明天继续他的数组探索之旅了。

第二天:类型码的奥秘

清晨,李明从一个关于数字和代码的梦中醒来。梦里,各种符号在他脑海中飞舞:‘i’、‘d’、‘f’、‘u’…这些神秘的字符代表着什么?

带着这个疑问,他一边啜饮着热咖啡,一边打开电脑。他决定深入研究array模块中的类型码。

"这些类型码究竟是什么?为什么要用’d’来表示双精度浮点数?"李明喃喃自语,手指在键盘上快速敲打。

经过几小时的研究和实验,他的笔记本上已经密密麻麻地记满了各种类型码:

import array

# 有符号整数
signed_int_array = array.array('i', [1, 2, 3, 4])  # 有符号整数
unsigned_int_array = array.array('I', [1, 2, 3, 4])  # 无符号整数

# 浮点数
float_array = array.array('f', [1.1, 2.2, 3.3])  # 单精度浮点数
double_array = array.array('d', [1.1, 2.2, 3.3])  # 双精度浮点数

# 字符
char_array = array.array('u', 'hello')  # Unicode字符

"原来如此!"李明恍然大悟,“这些类型码其实是C语言中的类型表示,这难怪array在处理同类型数据时比list更高效——它们在内存中的存储方式更接近底层编程语言!”

下午,阳光正好,李明决定用新学到的知识改进他的股票数据处理程序。他小心翼翼地将数据从list转换为array,然后运行程序。奇迹发生了!处理速度提高了将近3倍!

李明兴奋地一跃而起,差点打翻了咖啡杯。他迫不及待地拿起手机,给他的老朋友张晓打电话分享这个好消息。

第三天:数据结构的对决

"真的有那么神奇吗?"张晓隔着咖啡厅的桌子,半信半疑地看着李明。作为一位资深的金融分析师,张晓对数据处理的效率同样很关心。

"当然!但别只相信我的话,我们可以做个实验,"李明笑着打开笔记本电脑,“让我们系统地比较一下array和list在不同场景下的表现。”

两人头碰着头,开始设计实验。咖啡厅的角落里,充满了他们轻声的讨论和键盘的敲击声。

测试1:内存使用的较量

李明敲击键盘,专注地编写测试代码:

import array
import sys

# 创建包含10000个整数的list和array
int_list = list(range(10000))
int_array = array.array('i', range(10000))

# 比较内存占用
list_size = sys.getsizeof(int_list) + sum(sys.getsizeof(i) for i in int_list)
array_size = sys.getsizeof(int_array)

print(f"List size: {
     list_size} bytes")
print(f"Array size: {
     array_size} bytes")

在这里插入图片描述

程序运行完毕,屏幕上显示出惊人的结果:

List size: 368056 bytes
Array size: 40420 bytes

"太不可思议了!"李明指着屏幕上的数字,眼中闪烁着兴奋的光芒,“array的内存占用只有list的九分之一左右!整整节省了300多KB的内存!”

张晓推了推眼镜,惊讶地说:“368KB对比40KB,差距如此巨大!难怪处理大型金融数据时array更合适。想象一下,如果是处理上百万条记录,这种内存节省将会非常显著。”

测试2:速度的比拼

两人继续比较了两种数据结构的基本操作速度。

"让我们测试一下访问元素的速度,"李明提议道,“我要使用更多的数据来确保结果准确。”

import array
import time

# 准备测试数据
size = 100000000
test_list = list(range(size))
test_array = array.array('i', range(size))

# 测试访问元素的速度
start = time.time()
for i in range(10000000):
    _ = test_list[i]
list_access_time = time.time() - start

start = time.time()
for i in range(10000000):
    _ = test_array[i]
array_access_time = time.time() - start

print(

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2333933.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

spark-core编程2

Key-Value类型: foldByKey 当分区内计算规则和分区间计算规则相同时,aggregateByKey 就可以简化为 foldByKey combineByKey 最通用的对 key-value 型 rdd 进行聚集操作的聚集函数(aggregation function)。类似于aggregate()&…

AIDD-人工智能药物设计-大语言模型在医学领域的革命性应用

Nat. Rev. Bioeng. | 大语言模型在医学领域的革命性应用 大型语言模型(LLMs),如 ChatGPT,因其对人类语言的理解与生成能力而备受关注。尽管越来越多研究探索其在临床诊断辅助、医学教育等任务中的应用,但关于其发展、…

Windows 系统中安装 Git 并配置 GitHub 账户

由于电脑重装系统,重新配置了git. 以下是在 Windows 系统中安装 Git 并配置 GitHub 账户的详细步骤: 1. 安装 Git 访问 Git 官网下载页面下载 Windows 版本的 Git 安装程序运行安装程序,使用默认选项即可 2. 配置 Git 用户信息 打开命令…

QQ风格客服聊天窗口

QQ风格客服聊天窗口 展示引入方式 展示 引入方式 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title&g…

MCU刷写——Hex文件格式详解及Python代码

工作之余来写写关于MCU的Bootloader刷写的相关知识,以免忘记。今天就来聊聊Hex这种文件的格式,我是分享人M哥,目前从事车载控制器的软件开发及测试工作。 学习过程中如有任何疑问,可底下评论! 如果觉得文章内容在工作学习中有帮助到你,麻烦点赞收藏评论+关注走一波!感谢…

汇舟问卷:国外问卷调查技巧有哪些,具体该怎么操作

大家好&#xff0c;我是汇舟问卷&#xff0c;今天咱们就聊聊国外问卷答题的技巧和操作步骤&#xff0c;保你听完立马能上手&#xff01; 一、答题前先创建人设 1&#xff0c;进题时先瞄两眼问题&#xff0c;快速判断问卷主题&#xff0c;再定人设。比如遇到奶粉问卷&#xff…

C++标识符:检查是否和保留字冲突

1. 基础知识 最基本的要求&#xff1a; 字母、数字、下划线组成&#xff0c; 并且不能是数字开头。 禁忌1&#xff1a; C 关键字不能用做标识符。 它们是&#xff1a; alignas alignof asm auto bool break case catch char char16_t char32_t class const constexpr const_…

《Python星球日记》第27天:Seaborn 可视化

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 专栏&#xff1a;《Python星球日记》&#xff0c;限时特价订阅中ing 目录 一、Seabor…

自动驾驶技术-相机_IMU时空标定

自动驾驶技术-相机_IMU时空标定 时间延迟 时间延迟 参考链接1、2 相机主要分为全局和卷帘快门相机&#xff0c;从触发到成像的过程包括&#xff1a;复位时间、AE()曝光时间、读出时间 全局快门如下图所示 卷帘快门如下图所示 相机录制视频时&#xff0c;为了保持固定频率&am…

”插入排序“”选择排序“

文章目录 插入排序1. 直接插入排序(O(n^2))举例1&#xff1a;举例2&#xff1a;直插排序的"代码"直插排序的“时间复杂度” 2. 希尔排序(O(n^1.3))方法一方法二(时间复杂度更优) 选择排序堆排序直接选择排序 我们学过冒泡排序&#xff0c;堆排序等等。&#xff08;回…

Python深度学习基础——卷积神经网络(CNN)(PyTorch)

CNN原理 从DNN到CNN 卷积层与汇聚 深度神经网络DNN中&#xff0c;相邻层的所有神经元之间都有连接&#xff0c;这叫全连接&#xff1b;卷积神经网络 CNN 中&#xff0c;新增了卷积层&#xff08;Convolution&#xff09;与汇聚&#xff08;Pooling&#xff09;。DNN 的全连接…

MTK7628基于原厂的mtk-openwrt-sdk-20160324-8f8e4f1e.tar.bz2 源代码包,配置成单网口模式的方法

一、配置. 在SDK工程下&#xff0c;运行make kernel_menuconfig&#xff0c;如下图所示&#xff1a; Ralink Module --->选上“One Port Only”&#xff0c;如下图所示&#xff1a; 如果P0网口实现WAN口&#xff0c;就配置成W/LLLL,否则就配置成LLLL/W. 二、修改网口的原代…

艾伦·图灵:计算机科学与人工智能之父

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 艾伦图灵&#xff1a;计算机科学与人工智能之父 一、天才的诞生与早期生涯 1912年6月…

策略模式实现 Bean 注入时怎么知道具体注入的是哪个 Bean?

Autowire Resource 的区别 1.来源不同&#xff1a;其中 Autowire 是 Spring2.5 定义的注解&#xff0c;而 Resource 是 Java 定义的注解 2.依赖查找的顺序不同&#xff1a; 依赖注入的功能&#xff0c;是通过先在 Spring IoC 容器中查找对象&#xff0c;再将对象注入引入到当…

React九案例中

代码下载 地图找房模块 顶部导航栏 封装NavHeader组件实现城市选择&#xff0c;地图找房页面的复用&#xff0c;在 components 目录中创建组件 NavHeader&#xff0c;把之前城市列表写过的样式复制到 NavHeader.scss 下&#xff0c;在该组件中封装 antd-mobile 组件库中的 N…

第一期:[特殊字符] 深入理解MyBatis[特殊字符]从JDBC到MyBatis——持久层开发的转折点[特殊字符]

前言 &#x1f31f; 在软件开发的过程中&#xff0c;持久层&#xff08;或数据访问层&#xff09;是与数据库进行交互的关键部分。早期&#xff0c;开发者通常使用 JDBC&#xff08;Java Database Connectivity&#xff09;来实现与数据库的连接与操作。虽然 JDBC 在一定程度上…

Adobe Photoshop 2025 Mac中文 Ps图像编辑

Adobe Photoshop 2025 Mac中文 Ps图像编辑 一、介绍 Adobe Photoshop 2025 Mac版集成了多种强大的图像编辑、处理和创作功能。①强化了Adobe Sensei AI的应用&#xff0c;通过智能抠图、自动修复、图像生成等功能&#xff0c;用户能够快速而精确地编辑图像。②3D编辑和动画功…

用纯Qt实现GB28181协议/实时视频/云台控制/预置位/录像回放和下载/事件订阅/语音对讲

一、前言 在技术的长河中探索&#xff0c;有些目标一旦确立&#xff0c;便如同璀璨星辰&#xff0c;指引着我们不断前行。早在2014年&#xff0c;我心中就种下了用纯Qt实现GB28181协议的种子&#xff0c;如今回首&#xff0c;一晃十年已逝&#xff0c;好在整体框架和逻辑终于打…

让你方便快捷实现主题色切换(useCssVar)

文章目录 前言一、useCssVar是什么&#xff1f;二、使用步骤1.安装依赖2.实现主题色切换 总结 前言 使用 CSS 变量&#xff08;CSS Custom Properties&#xff09;实现主题色切换是一种高效且易于维护的方法。通过将主题颜色定义为 CSS 变量&#xff0c;你可以轻松地在不同主题…

面试之《websocket》

配置环境 mkdir express cd express npm init npm install express ws// index.js var app require("express")(); var WebSocket require("ws");var wss new WebSocket.Server({ port: 8888 });wss.on(connection, function connection(ws) {ws.on(m…