在开始前,我们先通过两个问题来引入主题:
- 办公室里有张三、李四、王五 3 个人,现在小宋也到办公室来上班了,如何用列表来表示?并输出办公室有哪些人。
本文介绍了 Python 中列表和元组的基本概念、定义格式及常用操作。列表支持增删改查,可存储多种数据类型且可变;元组不可变,适用于存储固定数据。内容涵盖索引查找、切片、排序、嵌套使用等核心功能,并对比了两者在内存与修改权限上的区别,帮助初学者掌握序列类型的使用场景。文章还包含实际问题的代码解决方案,如列表去重及人员管理模拟。

在开始前,我们先通过两个问题来引入主题:
此外,有一个列表 li1 = ["张三", "王五", "坤哥", "李四", "赵六", "坤哥", "王五", "坤哥", "张三", "坤哥"],将列表重复的数据删除,保留一个,不可以使用集合。你是否知道这个问题的答案了呢?接下来看完这节课就试着回头再来做一下吧。
**思考:**如果一个班级 100 位学生,每个人的姓名都要存储到变量,应该如何书写程序?声明 100 个变量吗?
**答:**列表即可,列表一次性可以存储多个数据。
li = [1, 2, 3, 4, "张三", "李四"]
列表可以一次性存储多个数据,且可以为不同数据类型。
列表的作用是一次性存储多个数据,程序员可以对这些数据进行的操作有:增、删、改、查。
name_list = ['张三', '李四', '王五', '赵六']
print(name_list[0])
print(name_list[1])
print(name_list[2])
语法
# 列表序列.index(数据,开始位置下标,结束位置下标)
name_list = ['张三', '李四', '王五', '赵六']
print(name_list.index('张三', 0, 2))
注意:如果查找的数据不存在则报错。
name_list = ['张三', '李四', '王五', '张三']
print(name_list.count('张三'))
name_list = ['张三', '李四', '王五', '赵六']
print(len(name_list))
**in:**判断指定数据在某个列表序列,如果在返回 True,否则返回 False。
**not in:**判断指定数据不在某个列表序列,如果不在返回 True,否则返回 False。
name_list = ['张三', '李四', '王五', '赵六']
name = input('请输入您要搜索的名字:')
if name in name_list:
print(f'您输入的名字是{name}, 名字已经存在')
else:
print(f'您输入的名字是{name}, 名字不存在')
作用:增加指定数据到列表中。
列表结尾追加数据。
语法
# 列表序列.append(数据)
name_list = ['张三', '李四', '王五', '赵六']
name_list.append('阿坤')
print(name_list)
如果 append() 追加的数据是一个序列,则追加整个序列到列表。
name_list = ['张三', '李四', '王五', '赵六']
alist = ["唱", "跳", "rap", "篮球"]
name_list.append(alist)
print(name_list)
# ['张三', '李四', '王五', '赵六', ['唱', '跳', 'rap', '篮球']]
list1 = ["张三", "李四", "王五"]
print(id(list1))
list1.append("赵六")
print(id(list1))
# 列表是可变的
# 修改之后,内存地址如果不变,那他就是
列表结尾追加数据,如果数据是一个序列,则将这个序列的数据逐一添加到列表。
name_list = ['张三', '李四', '王五', '赵六']
name_list.extend('阿坤')
print(name_list)
# ['张三', '李四', '王五', '赵六', '阿', '坤']
如果添加一个序列,则会将序列里面每一个元素添加进去。
name_list = ['张三', '李四', '王五', '赵六']
alist = ["唱", "跳", "rap", "篮球"]
name_list.extend(alist)
print(name_list)
指定位置新增数据。
语法
# 列表序列.insert(位置下标,数据)
name_list = ['张三', '李四', '王五', '赵六']
name_list.insert(1, '阿坤')
# 结果:['张三','阿坤', '李四', '王五','赵六']
print(name_list)
删除列表当中的数据
删除整个列表
name_list = ['张三', '李四', '王五', '赵六']
del name_list
print(name_list)
删除指定数据(根据索引删除)
name_list = ['张三', '李四', '王五', '赵六']
del name_list[1]
print(name_list)
# ['张三', '王五', '赵六']
删除指定下标的数据 (默认为最后一个),并返回该数据。
name_list = ['张三', '李四', '王五', '赵六']
name_list.pop(1)
print(name_list)
# ['张三', '王五', '赵六']
移除列表中某个数据的第一个匹配项。
# 列表序列.remove(数据)
name_list = ['张三', '李四', '王五', '赵六']
name_list.remove("张三")
print(name_list)
# ['李四', '王五', '赵六']
清空列表
name_list = ['张三', '李四', '王五', '赵六']
name_list.clear()
print(name_list)
# []
修改指定下标数据
直接修改
name_list = ['张三', '李四', '王五', '赵六']
name_list[0] = '阿坤'
print(name_list)
逆置
num_list = [1, 5, 2, 3, 6, 8]
num_list.reverse()
print(num_list)
# [8, 6, 3, 2, 5, 1]
排序
语法
reverse 表示排序规则,reverse = True 降序,reverse = False 升序(默认)
# 列表序列.sort(reverse=False)
li = [2, 3, 5, 6, 1, 4, 8]
li.sort(reverse=False)
print(li)
# [1, 2, 3, 4, 5, 6, 8]
li.sort(reverse=True)
print(li)
# [8, 6, 5, 4, 3, 2, 1]
复制一个列表
name_list = ['张三', '李四', '王五', '赵六']
name_li2 = name_list.copy()
print(name_li2)
# ['张三', '李四', '王五', '赵六']
依次打印列表中的各个数据
for 循环
name_list = ['张三', '李四', '王五', '赵六']
for i in name_list:
print(i)
while 循环
i = 0
name_list = ['Tom', 'Lily', 'Rose']
while i < len(name_list):
print(name_list[i])
i += 1
所谓列表嵌套指的就是一个列表里面包含了其他的子列表
# 找到篮球
name_list = [['张三', '李四', '阿坤'], ['唱', '跳', '篮球'], ['甲', '乙', '丙']]
# 第一步:按下标查找到篮球所在的列表
print(name_list[1])
# 第二步:从李四所在的列表里面,再按下标找到数据李四
print(name_list[1][2])
思考:如果想要存储多个数据,但是这些数据是不能修改的数据,怎么做?
定义元组使用小括号,且逗号隔开各个数据,数据可以是不同的数据类型。
# 多个数据元组
t1 = (10, 20, 30)
# 单个数据元组
t2 = (10,)
注意:如果定义的元组只有一个数据,那么这个数据后面也要添加逗号,否则数据类型为唯一的那个数据的数据类型。
元组数据不支持修改,只支持查找,具体如下
tuple1 = ('aa', 'bb', 'cc', 'bb')
print(tuple1[0])
查找某个数据,如果数据存在返回对应的下标,否则报错,语法和列表、字符串的 index 方法相同。
tuple1 = ('aa', 'bb', 'cc', 'bb')
print(tuple1.index('aa'))
统计某个数据在当前元组出现的次数。
tuple1 = ('aa', 'bb', 'cc', 'bb')
print(tuple1.count('bb'))
统计元组中数据的个数。
tuple1 = ('aa', 'bb', 'cc', 'bb')
print(len(tuple1))
元组内的直接数据如果修改则立即报错
但是如果元组里面有列表,修改列表里面的数据则是支持的。
tuple2 = (10, 20, ['aa', 'bb', 'cc'], 50, 30)
print(tuple2[2]) # 访问到列表
# ['aa', 'bb', 'cc']
tuple2[2][0] = 'aaaaa'
print(tuple2)
# (10, 20, ['aaaaa', 'bb', 'cc'], 50, 30)
| 特性 | 列表 (List) | 元组 (Tuple) |
|---|---|---|
| 定义符号 | [] | () |
| 可变性 | 可变 (Mutable) | 不可变 (Immutable) |
| 性能 | 稍慢 | 稍快 |
| 用途 | 存储动态变化的数据 | 存储固定配置或常量 |
针对开头提出的去重问题,可以使用以下代码实现(不使用集合):
li1 = ["张三", "王五", "坤哥", "李四", "赵六", "坤哥", "王五", "坤哥", "张三", "坤哥"]
unique_li = []
for item in li1:
if item not in unique_li:
unique_li.append(item)
print(unique_li)
对于办公室人员变动的问题:
office = ["张三", "李四", "王五"]
# 小宋加入
office.append("小宋")
print(office)
# 王五离开
office.remove("王五")
print(office)

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online