Python for in 迴圈

Python 的 for 迴圈是一种迭代控制结构,用于遍历可迭代对象(如列表、元组、字典、字串等)中的每个元素

fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
#apple
banana
cherry

Tuple 解构

Tuple 解构是一种将 Tuple 中的元素同时赋值给多个变量的语法糖。它让你可以更方便地处理 Tuple 中的元素。

person = ("Alice", 30, "New York")
name, age, city = person
print(name) # 输出: Alice
print(age) # 输出: 30
print(city) # 输出: New York

将 Tuple 解构与 for 迴圈结合

当 Tuple 中包含多个元素时,我们可以利用 Tuple 解构,在 for 迴圈中直接将 Tuple 中的元素赋值给不同的变量。

students = [
("Alice", 90),
("Bob", 85),
("Charlie", 92)
]

for name, score in students:
print(f"{name}\'s score is {score}")

#Alice\'s score is 90
Bob\'s score is 85
Charlie\'s score is 92

这段代码中,students 是一个包含多个 Tuple 的列表,每个 Tuple 代表一个学生,包含姓名和成绩。在 for 迴圈中,我们将每个 Tuple 解构为 name 和 score 两个变量,然后进行处理。

# 嵌套 Tuple
coordinates = [(1, 2), (3, 4), (5, 6)]
for x, y in coordinates:
print(f"({x}, {y})")

# 不等长 Tuple 与 _
data = [(1, 2, 3), (4, 5), (6, 7, 8, 9)]
for a, b, *rest in data:
print(a, b, rest)
#1 2 [3]
4 5 []
6 7 [8, 9]

为什么 print 会有 []?深入剖析 Tuple 解构与 *rest

*rest 的作用是将 Tuple 中多余的元素收集到一个新的列表中。因此,当 Tuple 中的元素数量超过 a 和 b 能够接收的数量时,多余的元素就会被放在 rest 所代表的列表中。

第一个 Tuple: (1, 2, 3)a 接收 1b 接收 2rest 接收 [3],因为 3 是多余的元素。第二个 Tuple: (4, 5)a 接收 4b 接收 5rest 接收空列表 [],因为没有多余的元素。第三个 Tuple: (6, 7, 8, 9)a 接收 6b 接收 7rest 接收 [8, 9],因为 8 和 9 是多余的元素。因此,在输出结果中,当 rest 包含元素时,就会以列表的形式显示,例如 [3]、[8, 9]。而当 rest 为空列表时,虽然不会显示任何内容,但它的存在还是会佔用一个位置。

*rest 的作用

收集多余元素: 当 Tuple 中的元素数量超过变量数量时,*rest 会将多余的元素收集成一个列表。灵活处理不同长度的 Tuple: 即使 Tuple 的长度不同,也能通过 *rest 来统一处理。解构时忽略部分元素: 如果只需要 Tuple 的前几个元素,可以使用 _ 来忽略后面的元素。