介绍
欢迎来到这个关于 Python 列表(Lists)和元组(Tuples)的实操实验(Lab)。列表是 Python 中最基本和最通用的数据结构之一,它允许你存储有序的项目集合。元组与列表相似,但有一个关键区别:它们是不可变的(immutable)。
在整个实验中,你将学习如何创建列表、访问和操作它们的元素,以及执行排序和循环等常见操作。你还将探索元组,并了解何时应该使用元组而不是列表。
这个实验环境是一个预配置的 WebIDE。所有必要的实验文件都已为你创建在 /home/labex/project 目录下。让我们开始吧。
访问列表元素
在这一步,你将学习如何使用索引(indexes)检索列表中的元素,以及如何使用切片(slicing)提取子列表。列表是包含在方括号 [] 中的有序项集合。
首先,从左侧的文件浏览器中打开文件 step1_access.py。我们将在该文件中编写代码。
注意: 如果你不熟悉使用 WebIDE(类似 VS Code),请先在 此 Lab 学习如何使用。
使用索引获取值
列表元素的访问使用基于零的索引,这意味着第一个元素位于索引 0 处。
将以下代码添加到 step1_access.py 中以创建一个列表并访问其第一个元素:
## step1_access.py
furniture = ['table', 'chair', 'rack', 'shelf']
## 访问第一个元素(索引 0)
print(furniture[0])
要运行脚本,请在 WebIDE 中打开一个终端并执行以下命令:
python3 /home/labex/project/step1_access.py
你应该会在控制台中看到列表的第一个元素被打印出来。
输出:
table
负数索引
你也可以使用负数索引从列表末尾访问元素。索引 -1 指向最后一个元素,-2 指向倒数第二个,依此类推。
修改 step1_access.py 以访问最后一个元素:
## step1_access.py
furniture = ['table', 'chair', 'rack', 'shelf']
## 访问最后一个元素(索引 -1)
print(furniture[-1])
再次运行脚本:
python3 /home/labex/project/step1_access.py
输出:
shelf
使用切片获取子列表
切片允许你使用 [start:end] 语法获取一个子列表。start 索引是包含的,而 end 索引是不包含的。
让我们来练习一下。对于你的验证挑战,修改 step1_access.py 以创建一个列表并打印它的一个切片。用以下代码替换现有内容:
## step1_access.py
furniture = ['table', 'chair', 'rack', 'shelf']
## 获取从索引 1 开始到索引 3 之前(不包括索引 3)的子列表
sublist = furniture[1:3]
print(sublist)
运行脚本查看结果:
python3 /home/labex/project/step1_access.py
输出:
['chair', 'rack']
你也可以使用完整的切片 [:] 来创建一个列表的副本。对原始列表的任何修改都不会影响副本。
## step1_access.py
spam = ['cat', 'bat', 'rat', 'elephant']
spam2 = spam[:] ## 创建一个浅拷贝(shallow copy)
spam.append('dog')
print(spam)
print(spam2)
运行脚本:
python3 /home/labex/project/step1_access.py
输出:
['cat', 'bat', 'rat', 'elephant', 'dog']
['cat', 'bat', 'rat', 'elephant']
成功打印出 ['chair', 'rack'] 切片后,点击 Verify 按钮进入下一步。
修改和操作列表
在这一步,你将探索如何管理和修改列表内容。这包括更改值、合并列表以及添加新元素。
打开文件 step2_modify.py 开始。
使用 len() 获取列表长度
len() 函数返回列表中项目的数量。
将此代码添加到 step2_modify.py 中:
## step2_modify.py
furniture = ['table', 'chair', 'rack', 'shelf']
print(len(furniture))
运行脚本:
python3 /home/labex/project/step2_modify.py
输出:
4
使用索引更改值
你可以通过为特定索引赋新值来更改列表中的元素。
## step2_modify.py
furniture = ['table', 'chair', 'rack', 'shelf']
furniture[0] = 'desk' ## 更改第一个元素
print(furniture)
运行脚本:
python3 /home/labex/project/step2_modify.py
输出:
['desk', 'chair', 'rack', 'shelf']
使用拼接和复制
你可以使用 + 运算符(拼接,concatenation)合并两个列表,或使用 * 运算符(复制,replication)重复列表的内容。
## step2_modify.py
list1 = [1, 2, 3]
list2 = ['A', 'B', 'C']
combined_list = list1 + list2
print(combined_list)
replicated_list = ['X'] * 3
print(replicated_list)
运行脚本:
python3 /home/labex/project/step2_modify.py
输出:
[1, 2, 3, 'A', 'B', 'C']
['X', 'X', 'X']
使用 append() 和 insert() 添加值
append()方法将一个项目添加到列表的末尾。insert()方法在指定的索引处添加一个项目。
对于你的验证任务,让我们结合这些操作。用以下代码替换 step2_modify.py 的内容。此脚本将创建一个列表,在末尾添加一个元素,并在开头插入另一个元素。
## step2_modify.py
furniture = ['table', 'chair', 'rack', 'shelf']
## 将 'bed' 添加到列表末尾
furniture.append('bed')
## 将 'desk' 插入到列表开头(索引 0)
furniture.insert(0, 'desk')
print(furniture)
运行脚本查看最终修改后的列表:
python3 /home/labex/project/step2_modify.py
输出:
['desk', 'table', 'chair', 'rack', 'shelf', 'bed']
一旦你的脚本产生了正确的输出,点击 Verify。
移除值和排序
在这一步,你将学习移除列表中项目和对列表内容进行排序的不同方法。
请打开文件 step3_remove.py。
移除值
Python 提供了几种从列表中移除项目的方法:
del语句: 移除特定索引处的项目。remove()方法: 移除特定值第一次出现的位置。pop()方法: 移除并返回特定索引处的项目(如果未给出索引,则移除并返回最后一个项目)。
让我们看看它们的实际应用。将以下内容添加到 step3_remove.py 中:
## step3_remove.py
furniture = ['table', 'chair', 'rack', 'shelf']
del furniture[2] ## 移除 'rack'
print(furniture)
furniture.remove('chair') ## 移除 'chair'
print(furniture)
运行脚本:
python3 /home/labex/project/step3_remove.py
输出:
['table', 'chair', 'shelf']
['table', 'shelf']
使用 sort() 排序值
sort() 方法会就地(in place)对列表进行排序。默认情况下,它按升序排序。
## step3_remove.py
numbers = [2, 5, 3.14, 1, -7]
numbers.sort()
print(numbers)
letters = ['a', 'z', 'A', 'Z']
letters.sort(key=str.lower) ## 不区分大小写的排序
print(letters)
运行脚本:
python3 /home/labex/project/step3_remove.py
输出:
[-7, 1, 2, 3.14, 5]
['a', 'A', 'z', 'Z']
对于你的验证任务,你需要创建一个列表,移除一个特定的项目,然后对剩余的项目进行排序。用以下内容替换 step3_remove.py 的内容:
## step3_remove.py
furniture = ['table', 'chair', 'rack', 'shelf']
## 移除项目 'rack'
furniture.remove('rack')
## 按字母顺序对列表进行排序
furniture.sort()
print(furniture)
运行脚本查看结果:
python3 /home/labex/project/step3_remove.py
输出:
['chair', 'shelf', 'table']
在你的脚本正确移除并排序列表后,点击 Verify。
循环和高级技巧
在这一步,你将掌握如何遍历列表以及使用一些高级但非常有用的列表技巧。
请打开文件 step4_loop.py 进行本节学习。
使用 for 循环
for 循环是遍历列表中项目的标准方法。
## step4_loop.py
furniture = ['table', 'chair', 'rack', 'shelf']
for item in furniture:
print(item)
运行脚本:
python3 /home/labex/project/step4_loop.py
输出:
table
chair
rack
shelf
使用 enumerate() 获取索引和值
如果在迭代过程中需要索引和值,请使用 enumerate() 函数。
## step4_loop.py
furniture = ['table', 'chair', 'rack', 'shelf']
for index, item in enumerate(furniture):
print(f'index: {index} - item: {item}')
运行脚本:
python3 /home/labex/project/step4_loop.py
输出:
index: 0 - item: table
index: 1 - item: chair
index: 2 - item: rack
index: 3 - item: shelf
in 和 not in 运算符
这些运算符允许你检查一个值是否存在于列表中。
## step4_loop.py
furniture = ['table', 'chair', 'rack', 'shelf']
print('rack' in furniture)
print('bed' not in furniture)
运行脚本:
python3 /home/labex/project/step4_loop.py
输出:
True
True
使用 zip() 循环处理多个列表
zip() 函数非常适合并行处理多个列表。它将每个列表中的元素配对。
对于你的验证任务,你将使用 zip() 来组合两个列表。用以下代码替换 step4_loop.py 的内容。它将遍历家具项目及其对应的价格,为每对打印一个格式化的字符串。
## step4_loop.py
furniture = ['table', 'chair', 'rack', 'shelf']
price = [100, 50, 80, 40]
for item, amount in zip(furniture, price):
print(f'The {item} costs ${amount}')
运行脚本查看组合后的输出:
python3 /home/labex/project/step4_loop.py
输出:
The table costs $100
The chair costs $50
The rack costs $80
The shelf costs $40
一旦你的脚本正常工作,点击 Verify。
理解元组 (Tuples)
在最后这一步,你将学习元组 (tuple) 数据类型。元组与列表类似,但它们是**不可变的 (immutable)**,这意味着创建后其内容不能被更改。
请打开文件 step5_tuple.py。
元组数据类型
元组使用圆括号 () 而不是方括号来定义。由于它们是不可变的,一旦元组创建,你就不能更改、添加或移除其中的元素。这使得它们在内存效率上更高,并且适用于不应被修改的数据。
你可以像使用列表一样,使用索引和切片来访问元组的元素。
## step5_tuple.py
furniture = ('table', 'chair', 'rack', 'shelf')
## 访问元素
print(furniture[0])
## 切片
print(furniture[1:3])
## 获取长度
print(len(furniture))
运行脚本:
python3 /home/labex/project/step5_tuple.py
输出:
table
('chair', 'rack')
4
如果你尝试修改元组,Python 将会引发一个 TypeError。例如,furniture[0] = 'desk' 会导致错误。
在 list() 和 tuple() 之间转换
你可以使用 list() 和 tuple() 构造函数轻松地在列表和元组之间进行转换。
对于你的验证任务,你需要将一个列表转换为一个元组。用以下代码替换 step5_tuple.py 的内容:
## step5_tuple.py
## 一个项目列表
my_list = ['cat', 'dog', 5]
## 将列表转换为元组
my_tuple = tuple(my_list)
print(my_tuple)
运行脚本查看生成的元组:
python3 /home/labex/project/step5_tuple.py
输出:
('cat', 'dog', 5)
如果你需要修改它,你也可以将元组转换回列表:
## step5_tuple.py
my_tuple = ('cat', 'dog', 5)
my_list = list(my_tuple)
print(my_list)
运行脚本:
python3 /home/labex/project/step5_tuple.py
输出:
['cat', 'dog', 5]
一旦你的脚本成功将列表转换为元组并打印出来,点击 Verify 完成本次实验。
总结
恭喜你完成了本次实验!你已经对 Python 的核心数据结构:列表 (lists) 和元组 (tuples) 建立了扎实的理解。
你已经学会了如何:
- 创建列表,并使用正向和负向索引访问元素。
- 使用切片 (slicing) 提取子列表。
- 通过更改值、使用
append()和insert()添加元素,以及使用del、remove()和pop()移除元素来修改列表。 - 使用
sort()方法对列表进行原地排序 (in-place sorting)。 - 使用
for循环、enumerate()和zip()有效地遍历列表。 - 理解元组的不可变性 (immutable nature),以及在列表和元组之间进行转换。
这些技能是任何 Python 程序员的基础,在您未来的项目中将非常宝贵。



