news 2026/8/20 11:29:41

Python列表与元组:有序序列的完整指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python列表与元组:有序序列的完整指南

Python列表与元组:有序序列的完整指南

列表和元组是Python中最常用的有序序列类型,本篇将系统讲解它们的用法、区别及实战场景。

一、列表(List)

列表是Python中最常用的数据结构,可以存储任意类型的元素,且支持增删改查。

1. 创建列表

# 空列表empty_list=[]empty_list2=list()# 有元素的列表numbers=[1,2,3,4,5]mixed=[1,"hello",3.14,True]# 可以混合不同类型nested=[[1,2],[3,4]]# 嵌套列表

2. 访问元素(索引与切片)

fruits=["苹果","香蕉","橙子","葡萄","西瓜"]# 索引(从0开始)print(fruits[0])# 苹果print(fruits[-1])# 西瓜(负索引从末尾开始)# 切片 [起始:结束:步长]print(fruits[1:3])# ['香蕉', '橙子'](不包含结束索引)print(fruits[:3])# ['苹果', '香蕉', '橙子'](省略起始默认0)print(fruits[2:])# ['橙子', '葡萄', '西瓜'](省略结束到末尾)print(fruits[::2])# ['苹果', '橙子', '西瓜'](步长2)print(fruits[::-1])# ['西瓜', '葡萄', '橙子', '香蕉', '苹果'](反转)

3. 修改元素

fruits=["苹果","香蕉","橙子"]fruits[0]="草莓"print(fruits)# ['草莓', '香蕉', '橙子']

4. 添加元素

fruits=["苹果","香蕉"]# append:末尾添加单个元素fruits.append("橙子")print(fruits)# ['苹果', '香蕉', '橙子']# insert:指定位置插入fruits.insert(1,"草莓")print(fruits)# ['苹果', '草莓', '香蕉', '橙子']# extend:批量添加(拼接另一个列表)fruits.extend(["葡萄","西瓜"])print(fruits)# ['苹果', '草莓', '香蕉', '橙子', '葡萄', '西瓜']

5. 删除元素

fruits=["苹果","香蕉","橙子","香蕉"]# remove:删除第一个匹配的元素fruits.remove("香蕉")print(fruits)# ['苹果', '橙子', '香蕉']# pop:删除指定索引的元素(默认最后一个),并返回该元素removed=fruits.pop()print(removed)# 香蕉print(fruits)# ['苹果', '橙子']# del:按索引删除delfruits[0]print(fruits)# ['橙子']# clear:清空列表fruits.clear()print(fruits)# []

6. 常用方法

numbers=[3,1,4,1,5,9,2,6]# 统计元素出现次数print(numbers.count(1))# 2# 查找元素索引(不存在会报错)print(numbers.index(5))# 4# 排序(原地修改)numbers.sort()print(numbers)# [1, 1, 2, 3, 4, 5, 6, 9]# 降序排序numbers.sort(reverse=True)print(numbers)# [9, 6, 5, 4, 3, 2, 1, 1]# 反转numbers.reverse()# 复制new_list=numbers.copy()

7. 列表推导式(重点)

列表推导式是Python的特色语法,简洁高效地创建列表。

# 基础形式:[表达式 for 变量 in 可迭代对象]squares=[x**2forxinrange(1,6)]print(squares)# [1, 4, 9, 16, 25]# 带条件筛选evens=[xforxinrange(1,11)ifx%2==0]print(evens)# [2, 4, 6, 8, 10]# 带if-elseresult=["偶数"ifx%2==0else"奇数"forxinrange(1,6)]print(result)# ['奇数', '偶数', '奇数', '偶数', '奇数']# 嵌套推导式(展平二维列表)matrix=[[1,2,3],[4,5,6],[7,8,9]]flat=[numforrowinmatrixfornuminrow]print(flat)# [1, 2, 3, 4, 5, 6, 7, 8, 9]

二、元组(Tuple)

元组和列表类似,但不可修改(immutable)。

1. 创建元组

# 空元组empty_tuple=()# 有元素的元组point=(3,4)colors=("红","绿","蓝")# 单元素元组需要逗号(重要!)single=(1,)# 这是元组not_tuple=(1)# 这是整数# 可以省略括号data=1,2,3print(type(data))# <class 'tuple'>

2. 元组的操作

point=(3,4)# 访问(和列表一样)print(point[0])# 3# 切片print(point[:1])# (3,)# 拼接new_tuple=point+(5,6)print(new_tuple)# (3, 4, 5, 6)# 重复print(point*2)# (3, 4, 3, 4)# 长度print(len(point))# 2

⚠️ 元组不能修改元素,不能添加、删除,否则会报错TypeError: 'tuple' object does not support item assignment

3. 元组解包

# 基本解包x,y=(3,4)print(x,y)# 3 4# 交换变量(本质是元组解包)a,b=1,2a,b=b,a# 带*的解包first,*rest=[1,2,3,4,5]print(first)# 1print(rest)# [2, 3, 4, 5]*head,last=[1,2,3,4,5]print(head)# [1, 2, 3, 4]print(last)# 5

三、列表 vs 元组:如何选择?

特性列表(List)元组(Tuple)
可变性可变不可变
语法[]()
性能稍慢更快(内存更小)
安全性可被修改数据安全
可作为字典键不可以可以
适用场景需要增删改的数据固定不变的数据、函数多返回值

选择建议:

  • 数据需要变化 → 用列表
  • 数据固定不变 → 用元组(如坐标、配置项)
  • 函数返回多个值 → 用元组

四、实战:学生成绩统计

# 学生成绩管理scores=[("张三",85),("李四",92),("王五",78),("赵六",95),("钱七",88)]# 计算平均分total=sum(scorefor_,scoreinscores)average=total/len(scores)print(f"平均分:{average:.1f}")# 找出最高分和最低分highest=max(scores,key=lambdax:x[1])lowest=min(scores,key=lambdax:x[1])print(f"最高分:{highest[0]}({highest[1]}分)")print(f"最低分:{lowest[0]}({lowest[1]}分)")# 成绩排序(降序)ranked=sorted(scores,key=lambdax:x[1],reverse=True)print("\n成绩排名:")fori,(name,score)inenumerate(ranked,1):print(f"第{i}名:{name}-{score}分")# 筛选优秀学生(90分以上)excellent=[nameforname,scoreinscoresifscore>=90]print(f"\n优秀学生:{excellent}")

运行结果:

平均分: 87.6 最高分: 赵六(95分) 最低分: 王五(78分) 成绩排名: 第1名: 赵六 - 95分 第2名: 李四 - 92分 第3名: 钱七 - 88分 第4名: 张三 - 85分 第5名: 王五 - 78分 优秀学生: ['李四', '赵六']

五、常见坑点

  1. 单元素元组忘记逗号(1)是整数,(1,)才是元组
  2. 列表作为默认参数:函数默认参数用列表会导致共享,应用None
  3. 遍历列表时删除元素:会导致索引错乱,应遍历副本或倒序删除
  4. 浅拷贝问题new = old是引用,修改一个另一个也变,应用.copy()old[:]
# 错误示范:浅拷贝a=[1,2,[3,4]]b=a.copy()b[2][0]=99print(a)# [1, 2, [99, 4]] 嵌套元素还是共享的# 深拷贝importcopy c=copy.deepcopy(a)

六、课后练习

  1. 编写程序,输入一组数字,输出其中的最大值、最小值和平均值
  2. 编写程序,将列表[1, 2, 3, 4, 5]中的每个元素平方,生成新列表
  3. 编写程序,去除列表中的重复元素(至少用两种方法)

七、小结

本篇详细讲解了列表和元组的用法,包括增删改查、切片、推导式、元组解包等核心操作。列表适用于可变数据,元组适用于固定数据,合理选择能让代码更高效安全。

📌下一篇预告:《Python字典与集合:键值对与去重的艺术》


本专栏持续更新中,欢迎点赞、收藏、关注三连支持!🐍

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/20 11:26:52

单片机毕设选题推荐:基于 STM32 的温湿度光照采集与智能柜体控制装置开发 基于 STM32 的 WiFi 远程智能柜体自动化控制系统设计(012004)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机&#xff0c;Java、小程序技术领域和毕业项目实战 ✌️…

作者头像 李华
网站建设 2026/8/20 11:25:12

从 GenIL 到 OData,理解 SAP Gateway Integration Scenarios 的服务生成机制

在一套仍然运行着 SAP CRM、WebClient UI、BOL 和 GenIL 的经典 SAP Business Suite 系统里,经常会遇到这样一种需求,后台已经存在成熟的业务对象模型,销售机会、Business Partner、产品、市场活动、服务请求等业务能力也已经通过 GenIL 暴露给 WebClient UI 使用,现在希望…

作者头像 李华
网站建设 2026/8/20 11:24:42

告别网盘龟速下载:一个脚本解锁八大网盘直链下载链接

告别网盘龟速下载&#xff1a;一个脚本解锁八大网盘直链下载链接 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云…

作者头像 李华
网站建设 2026/8/20 11:24:23

基于DHT11与ThingSpeak的物联网温湿度监测系统实战

1. 项目概述&#xff1a;从传感器到云端的数据之旅 如果你手头有一个Arduino开发板和一个DHT11温湿度传感器&#xff0c;想做的可能只是看看当前的温度和湿度。但当你把数据上传到ThingSpeak这个物联网平台时&#xff0c;整个项目的意义就完全不同了。这不再是一个简单的本地读…

作者头像 李华
网站建设 2026/8/20 11:23:28

挖到宝✨一个顶十个学术工具!OKBIYE承包你整个论文季

写论文最崩溃的瞬间&#xff1a; 开题没思路、找文献要翻墙、绘图不会专业软件、排版永远对不上学校格式、查重AI双检反复翻车、答辩PPT无从下手&#x1f62d; 之前写一篇论文&#xff0c;来回切换十几个网站工具&#xff0c;折腾半个月&#xff0c;返工无数次&#xff0c;纯…

作者头像 李华