python笔记-数据结构与算法04-列表与元组

本文介绍了Python中的列表和元组数据结构,包括它们在内存中的存储方式、二分搜索算法以及两者之间的区别。列表作为动态数组,支持变长和元素修改,而元组作为静态数组,不可变且更节省内存。二分搜索在有序数组中提供O(log n)的查询效率。
摘要由CSDN通过智能技术生成


前言

列表和元组之类的数据结构被称为数组。一个数组是数据在某种内在次序下的扁平列表。这一先验次序十分重要:知道了数据在数组中的确定位置,我们就能以 O(1)的复杂度得到它!


1.数组在列表中存在的方式

一台计算机的系统内存可以被看作是一系列编了号的桶,每个桶可以存放一个数字。这些数字可以被用来代表任何我们关心的变量(整数、浮点数、字符串,或其他数据结构),因为它们只是引用了数据被保存在内存中的位置。
当我们想要创建一个数组(也就是一个列表或元组)时,我们首先必须分配一块系统内存(其每一段都将被当成是一个整型大小的指向实际数据的指针)。这需要进入内核,操作系统的子进程,去申请使用 N 个连续的桶。
在这里插入图片描述

Python 中列表还记录了它们的大小,所以在分配的 6 个块中,仅可使用 5 个——第一个元素是列表的长度

假设我们需要获取数组的第一个元素,只需要去第一个桶(用M表示), M+1,并读出其中的值。另一方面,如果我们需要数组的第五个元素,可以去位于 M+5 的桶并读取其内容。总而言之,如果我们想要获取数组的第 i 个元素,就去桶 M+i。也就是说,只要我们的数据保存在连续的桶里且知道数据的顺序,就能一步( O(1))定位到数据所在的桶,无论我们的数组有多大
示例如下:

%%timeit l = range(10)
l[5]
##########
52.2 ns ± 3.63 ns per loop (mean ± std. dev. of 7 runs, 10,000,000 loops each)
%%timeit l = range(1000000)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天骄书虫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值