python什么叫序列_列表、元组、字符串等序列类型核心概念解析

发布时间 - 2026-02-02 00:00:00    点击率:
序列是支持索引、切片、len()和迭代的有序容器,核心在于实现__getitem__和__len__方法;list可变,tuple不可变但可含可变对象;str是不可变Unicode序列;range是惰性整数序列。

序列的本质是支持索引和切片的有序容器

Python 中的 listtuplestrbytesrange 都是序列类型,根本特征不是“能放多个值”,而是实现了 __getitem____len__,从而支持 [i] 索引、[start:stop:step] 切片、len()for x in seq: 迭代等共性操作。比如 range(5)[2] 能取到 2range(5)[1:4] 返回 range(1, 4) —— 它没存所有数,但行为符合序列协议。

列表和元组的关键差异在可变性与内存模型

列表是可变序列(list),支持 .append().pop()[i] = x;元组是不可变序列(tuple),创建后不能增删改元素。注意:不可变 ≠ 所有嵌套对象都不可变。例如 t = ([1], 2) 是合法元组,t[0].append(3) 不报错,因为变的是列表对象本身,元组里存的只是对它的引用。

  • 函数参数默认用 tuple 接收多余位置参数:def f(*args):argstuple
  • dict.keys() 在 Python 3.7+ 返回 dict_keys 视图,不是序列;想切片得先转成 list(d.keys())
  • 元组作为字典键可用,列表不行:{(1, 2): 'ok'} 合法,{[1, 2]: 'bad'}TypeError: unhashable type: 'list'

字符串是不可变的字符序列,不是“字符数组”

str 行为上像只读元组,但底层是 Unicode 码点序列,不是字节数组。所以 'abc'[1] 返回 'b'(仍是 str 类型),不是 intbytes'abc'[1:2] 也是 str,不是单个字符类型。常见误区:

  • 误以为 s[0] 是 ASCII 值:实际是长度为 1 的字符串,要转数字得用 ord(s[0])
  • += 拼接大量字符串性能差:每次都会新建对象,应改用 ''.join(list_of_str)
  • str 支持 .encode()bytes,但 bytes 切片返回仍是 bytes,不是 int;要取单个字节整数值,得用 b[0](Python 3)

别把 range 当作“轻量 list”,它不存储全部值

range 是惰性序列,只存 start/stop/step 三个数和长度逻辑,len(range(10**10)) 瞬间返回,而 list(range(10**10)) 直接爆内存。但它不支持任意对象索引——只能用整数,且不支持 .append() 等方法。容易踩坑的点:

  • range(5) == range(0, 5)True,但 range(0, 5, 1) is not range(0, 5)(不同对象)
  • list(range(1, 6))[::2][1, 3, 5];但 range(1, 6)[::2]range(1, 6, 2),仍是 range 对象
  • 传给需要“真列表”的函数(如 numpy.array())时,必须显式调用 list(),否则可能触发意外行为

序列协议看着简单,但跨类型混用时(比如把 rangelist 用、对 str.append)出错往往不直观。最稳妥的做法是:先用 isinstance(x, colle

ctions.abc.Sequence) 检查,再按需转换,而不是依赖鸭子类型硬刚。


# python  # app  # 字节  # numpy  # Array  # for  # 子类  # 字符串  # int  # 切片  # len  # append  # 对象  # ASCII  # 仍是  # 不支持  # 的是  # 都是  # 看着  # 迭代  # 都不  # 多个  # 报错  # 但它 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 轻松掌握MySQL函数中的last_insert_id()  Android Socket接口实现即时通讯实例代码  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  HTML 中动态设置元素 name 属性的正确语法详解  Swift开发中switch语句值绑定模式  Windows Hello人脸识别突然无法使用  详解Android——蓝牙技术 带你实现终端间数据传输  网站建设保证美观性,需要考虑的几点问题!  Java遍历集合的三种方式  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  b2c电商网站制作流程,b2c水平综合的电商平台?  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  如何获取PHP WAP自助建站系统源码?  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  桂林网站制作公司有哪些,桂林马拉松怎么报名?  Linux网络带宽限制_tc配置实践解析【教程】  Android仿QQ列表左滑删除操作  Laravel如何使用Vite进行前端资源打包?(配置示例)  Laravel如何实现本地化和多语言支持?(i18n教程)  Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复  焦点电影公司作品,电影焦点结局是什么?  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】  Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  百度浏览器如何管理插件 百度浏览器插件管理方法  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  js实现点击每个li节点,都弹出其文本值及修改  HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】  如何挑选高效建站主机与优质域名?  googleplay官方入口在哪里_Google Play官方商店快速入口指南  Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives  微信小程序 闭包写法详细介绍  如何快速搭建个人网站并优化SEO?  西安专业网站制作公司有哪些,陕西省建行官方网站?  Android自定义listview布局实现上拉加载下拉刷新功能  如何在宝塔面板中创建新站点?  如何构建满足综合性能需求的优质建站方案?  奇安信“盘古石”团队突破 iOS 26.1 提权  大学网站设计制作软件有哪些,如何将网站制作成自己app?  Laravel定时任务怎么设置_Laravel Crontab调度器配置  Android利用动画实现背景逐渐变暗  香港服务器部署网站为何提示未备案?  如何在阿里云部署织梦网站?  在线教育网站制作平台,山西立德教育官网?  Laravel如何使用Sanctum进行API认证?(SPA实战)  Linux安全能力提升路径_长期防护思维说明【指导】  JS实现鼠标移上去显示图片或微信二维码  如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)  打造顶配客厅影院,这份100寸电视推荐名单请查收