Python for 循环教程:从入门到精通 – wiki基地

I’ve made a mistake in assuming a write_file tool was available when it isn’t listed in my provided tools. Since I cannot directly write files, I will output the requested article content directly to you in markdown format.

Python for 循环教程:从入门到精通

Python 的 for 循环是其最基本也是最强大的控制流语句之一,用于迭代序列(如列表、元组、字典、集合或字符串)或其他可迭代对象。掌握 for 循环不仅能让你高效地处理数据集合,更是理解 Python 编程范式的重要一步。本教程将从基础概念讲起,逐步深入到高级用法和常见技巧。

1. for 循环基础:迭代可迭代对象

for 循环的核心思想是“遍历”。它会按顺序访问可迭代对象中的每一个元素,并对每个元素执行一系列操作。

基本语法:

python
for 变量 in 可迭代对象:
# 循环体(对每个元素执行的代码)
# 注意缩进

示例 1:遍历列表

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

输出:

apple
banana
cherry

示例 2:遍历字符串

字符串也是可迭代对象,for 循环会遍历其中的每一个字符。

python
name = "Python"
for char in name:
print(char)

输出:

P
y
t
h
o
n

示例 3:遍历元组

python
numbers = (1, 2, 3, 4, 5)
for num in numbers:
print(num * 2)

输出:

2
4
6
8
10

2. 使用 range() 函数生成数字序列

在很多情况下,我们不需要遍历一个现有的集合,而是需要一个数字序列来控制循环次数,或者作为索引。range() 函数就是为此而生。

range() 函数可以有三种形式:

  • range(stop): 生成从 0 到 stop-1 的整数序列。
  • range(start, stop): 生成从 startstop-1 的整数序列。
  • range(start, stop, step): 生成从 startstop-1,步长为 step 的整数序列。

示例 4:range(stop)

python
for i in range(5): # 0, 1, 2, 3, 4
print(i)

示例 5:range(start, stop)

python
for i in range(2, 7): # 2, 3, 4, 5, 6
print(i)

示例 6:range(start, stop, step)

python
for i in range(1, 10, 2): # 1, 3, 5, 7, 9
print(i)

3. for 循环与 breakcontinue

breakcontinue 是两个控制循环流程的关键字。

  • break: 立即终止整个循环。
  • continue: 跳过当前迭代中剩余的代码,进入下一次迭代。

示例 7:使用 break 提前终止循环

python
for i in range(10):
if i == 5:
print("Found 5, breaking loop.")
break
print(i)

输出:

0
1
2
3
4
Found 5, breaking loop.

示例 8:使用 continue 跳过当前迭代

python
for i in range(5):
if i % 2 == 0: # 如果是偶数
print(f"Skipping even number: {i}")
continue
print(f"Odd number: {i}")

输出:

Skipping even number: 0
Odd number: 1
Skipping even number: 2
Odd number: 3
Skipping even number: 4

4. for 循环与 else 子句

Python 的 for 循环可以带一个 else 子句。这个 else 子句只有在循环“正常”结束(即没有遇到 break 语句而终止)时才会执行。

示例 9:for-else 正常结束

python
for i in range(3):
print(i)
else:
print("Loop completed without break.")

输出:

0
1
2
Loop completed without break.

示例 10:for-elsebreak 中断

python
for i in range(5):
if i == 2:
print("Breaking loop at 2.")
break
print(i)
else:
print("Loop completed without break.") # 这行不会执行

输出:

0
1
Breaking loop at 2.

for-else 子句在搜索操作中非常有用,可以方便地判断是否找到了目标。

5. 高级 for 循环技巧

5.1. 使用 enumerate() 获取索引和值

当我们需要在遍历可迭代对象的同时获取每个元素的索引时,enumerate() 函数是理想的选择。

示例 11:enumerate()

python
greetings = ["Hello", "Hi", "Hey"]
for index, greeting in enumerate(greetings):
print(f"Index {index}: {greeting}")

输出:

Index 0: Hello
Index 1: Hi
Index 2: Hey

enumerate() 还可以接受一个 start 参数来指定起始索引。

python
for index, greeting in enumerate(greetings, start=1):
print(f"Index {index}: {greeting}")

输出:

Index 1: Hello
Index 2: Hi
Index 3: Hey

5.2. 使用 zip() 并行遍历多个可迭代对象

zip() 函数可以将多个可迭代对象中的元素“打包”成元组,然后并行遍历。它会一直迭代到最短的那个可迭代对象结束。

示例 12:zip()

“`python
names = [“Alice”, “Bob”, “Charlie”]
ages = [25, 30, 22]
cities = [“New York”, “London”, “Paris”]

for name, age, city in zip(names, ages, cities):
print(f”{name} is {age} years old and lives in {city}.”)
“`

输出:

Alice is 25 years old and lives in New York.
Bob is 30 years old and lives in London.
Charlie is 22 years old and lives in Paris.

5.3. 遍历字典

字典(dict)有多种遍历方式。

  • 遍历键 (默认):
    python
    my_dict = {"a": 1, "b": 2, "c": 3}
    for key in my_dict:
    print(key)
  • 遍历键 (显式):
    python
    for key in my_dict.keys():
    print(key)
  • 遍历值:
    python
    for value in my_dict.values():
    print(value)
  • 遍历键值对:
    python
    for key, value in my_dict.items():
    print(f"Key: {key}, Value: {value}")

输出示例 (键值对):

Key: a, Value: 1
Key: b, Value: 2
Key: c, Value: 3

5.4. 列表推导式 (List Comprehensions)

列表推导式是一种简洁而高效的创建新列表的方式,通常可以替代包含 for 循环和 append() 的传统循环。

基本语法:

python
[表达式 for 变量 in 可迭代对象 if 条件]

示例 13:将列表中的每个数字平方

传统 for 循环:

python
numbers = [1, 2, 3, 4, 5]
squares = []
for num in numbers:
squares.append(num ** 2)
print(squares) # Output: [1, 4, 9, 16, 25]

列表推导式:

python
numbers = [1, 2, 3, 4, 5]
squares = [num ** 2 for num in numbers]
print(squares) # Output: [1, 4, 9, 16, 25]

示例 14:带条件的列表推导式

python
even_squares = [num ** 2 for num in numbers if num % 2 == 0]
print(even_squares) # Output: [4, 16]

列表推导式还有对应的字典推导式 (Dictionary Comprehensions) 和集合推导式 (Set Comprehensions)。

6. 嵌套 for 循环

当我们需要在每次外部循环迭代时执行内部循环时,可以使用嵌套 for 循环。

示例 15:九九乘法表

python
for i in range(1, 10):
for j in range(1, i + 1):
print(f"{j}x{i}={i*j}\t", end="")
print() # 每一行结束后换行

输出:

1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81

7. 迭代器和生成器 (简介)

for 循环的底层机制是依赖于迭代器协议。任何实现了 __iter__ 方法(返回一个迭代器对象)和 __next__ 方法(返回下一个元素,如果没有则抛出 StopIteration 异常)的对象都是可迭代对象。

生成器 (Generators) 是一种特殊的迭代器,它使用 yield 关键字来生成值,而不是一次性构建整个序列。这对于处理大型数据集或无限序列非常内存高效。

示例 16:简单的生成器函数

“`python
def my_generator():
for i in range(3):
yield i * 10

for value in my_generator():
print(value)
“`

输出:

0
10
20

生成器表达式类似于列表推导式,但使用圆括号 () 而不是方括号 [],它返回一个生成器对象。

python
gen_exp = (i * 10 for i in range(3))
for value in gen_exp:
print(value)

总结

for 循环是 Python 中处理序列和可迭代对象的基石。从简单的遍历到与 range()enumerate()zip() 的结合使用,再到更高级的列表推导式和生成器,掌握这些概念将大大提升你的 Python 编程能力和代码效率。通过不断练习和应用,你将能够灵活运用 for 循环解决各种编程问题。

滚动至顶部