页面加载中...
在 Python 中,for 循环用于遍历可迭代对象(如列表、元组、字符串等)。
根据 Python 官方文档(https://docs.python.org/3/tutorial/controlflow.html#for-statements):
"for 语句用于遍历可迭代对象的元素,按它们在对象中出现的顺序进行。"
下面是 for 循环的基本用法:
# 遍历列表
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit) # 依次输出: apple, banana, cherry
# 遍历字符串
for char in "hello":
print(char) # 依次输出: h, e, l, l, o
# 遍历元组
numbers = (1, 2, 3, 4, 5)
for num in numbers:
print(num * 2) # 依次输出: 2, 4, 6, 8, 10
# 遍历字典的键
person = {"name": "John", "age": 30, "city": "New York"}
for key in person:
print(key) # 依次输出: name, age, city
# 遍历字典的值
for value in person.values():
print(value) # 依次输出: John, 30, New York
# 遍历字典的键值对
for key, value in person.items():
print(f"{key}: {value}") # 依次输出: name: John, age: 30, city: New Yorkrange() 函数常用于生成数字序列,在 for 循环中非常有用。
# 生成从 0 到 4 的整数序列
for i in range(5):
print(i) # 依次输出: 0, 1, 2, 3, 4
# 生成从 2 到 6 的整数序列
for i in range(2, 7):
print(i) # 依次输出: 2, 3, 4, 5, 6
# 生成从 1 到 10 的奇数序列
for i in range(1, 11, 2):
print(i) # 依次输出: 1, 3, 5, 7, 9
# 使用 range() 遍历列表的索引
fruits = ["apple", "banana", "cherry"]
for i in range(len(fruits)):
print(f"索引 {i}: {fruits[i]}") # 依次输出: 索引 0: apple, 索引 1: banana, 索引 2: cherryfor 循环可以嵌套使用,用于处理多维数据结构。
# 打印乘法表
for i in range(1, 10):
for j in range(1, i + 1):
print(f"{j}x{i}={i*j}", end=" ")
print() # 换行
# 遍历二维列表
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
for row in matrix:
for element in row:
print(element, end=" ")
print() # 换行while 循环用于在条件为真时重复执行代码块。
根据 Python 官方文档(https://docs.python.org/3/reference/compound_stmts.html#the-while-statement):
"while 语句用于重复执行代码块,直到条件表达式的值为假。"
下面是 while 循环的基本用法:
# 基本的 while 循环
count = 0
while count < 5:
print(count)
count += 1 # 依次输出: 0, 1, 2, 3, 4
# 从用户输入读取数据直到输入 'quit'
user_input = ""
while user_input != "quit":
user_input = input("请输入一个词(输入 'quit' 退出): ")
if user_input != "quit":
print(f"你输入了: {user_input}")
# 计算 1 到 100 的和
sum = 0
num = 1
while num <= 100:
sum += num
num += 1
print(f"1 到 100 的和为: {sum}") # 输出: 5050无限循环在条件永远为真时使用,通常需要配合 break 语句来终止。
# 无限循环示例
while True:
user_input = input("请输入一个数字(输入 'q' 退出): ")
if user_input == 'q':
break # 退出循环
try:
num = int(user_input)
print(f"你输入的数字的平方是: {num**2}")
except ValueError:
print("请输入有效的数字")
# 服务器监听循环(简化示例)
running = True
while running:
# 检查是否有新的连接
# 处理连接请求
if some_condition: # 例如用户按下 Ctrl+C
running = False # 设置标志位退出循环break 语句用于立即退出当前循环。
# 在列表中查找元素
fruits = ["apple", "banana", "cherry", "date"]
for fruit in fruits:
if fruit == "cherry":
print("找到樱桃了!")
break # 退出循环
print(f"当前检查: {fruit}")
# while 循环中的 break
count = 0
while True:
print(count)
count += 1
if count > 5:
break # 退出无限循环continue 语句用于跳过当前循环的剩余部分,直接进入下一次循环。
# 打印奇数
for i in range(10):
if i % 2 == 0:
continue # 跳过偶数
print(i) # 依次输出: 1, 3, 5, 7, 9
# 跳过特定元素
fruits = ["apple", "banana", "cherry", "date"]
for fruit in fruits:
if fruit == "banana":
continue # 跳过香蕉
print(f"我喜欢 {fruit}")循环可以有一个可选的 else 子句,当循环正常结束(没有被 break 中断)时执行。
# for 循环的 else 子句
for i in range(5):
print(i)
else:
print("循环正常结束") # 输出: 循环正常结束
# while 循环的 else 子句
count = 0
while count < 3:
print(count)
count += 1
else:
print("循环正常结束") # 输出: 循环正常结束
# break 会跳过 else 子句
for i in range(10):
if i == 5:
break
print(i)
else:
print("循环正常结束") # 不会执行
# else 子句的常见用途:搜索
numbers = [2, 4, 6, 8, 10]
search_value = 7
for num in numbers:
if num == search_value:
print(f"找到 {search_value} 了!")
break
else:
print(f"{search_value} 不在列表中") # 输出: 7 不在列表中列表推导式是一种简洁的创建列表的方法,通常比 for 循环更高效。
# 基本列表推导式
squares = [x**2 for x in range(10)]
print(squares) # 输出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# 带条件的列表推导式
even_numbers = [x for x in range(10) if x % 2 == 0]
print(even_numbers) # 输出: [0, 2, 4, 6, 8]
# 嵌套列表推导式
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = [element for row in matrix for element in row]
print(flattened) # 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 条件表达式在列表推导式中
numbers = [1, 2, 3, 4, 5]
result = ["偶数" if x % 2 == 0 else "奇数" for x in numbers]
print(result) # 输出: ['奇数', '偶数', '奇数', '偶数', '奇数']生成器表达式类似于列表推导式,但使用圆括号而不是方括号,返回一个生成器对象。
# 生成器表达式
squares_gen = (x**2 for x in range(10))
print(squares_gen) # 输出: <generator object <genexpr> at 0x...>
# 遍历生成器
for square in squares_gen:
print(square, end=" ") # 依次输出: 0 1 4 9 16 25 36 49 64 81
# 内存效率比较
# 列表推导式会立即创建整个列表
large_list = [x for x in range(1000000)] # 占用大量内存
# 生成器表达式只在需要时生成值
large_gen = (x for x in range(1000000)) # 占用内存少zip() 函数用于同时迭代多个序列。
# 同时迭代两个列表
names = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 35]
for name, age in zip(names, ages):
print(f"{name} 今年 {age} 岁") # 依次输出: Alice 今年 25 岁, Bob 今年 30 岁, Charlie 今年 35 岁
# 处理不等长的序列
a = [1, 2, 3]
b = ['a', 'b', 'c', 'd']
for x, y in zip(a, b):
print(x, y) # 只会迭代到较短序列的长度: 1 a, 2 b, 3 c
# 使用 zip() 创建字典
keys = ["name", "age", "city"]
values = ["John", 30, "New York"]
person = dict(zip(keys, values))
print(person) # 输出: {'name': 'John', 'age': 30, 'city': 'New York'}# 不推荐:每次循环都计算列表长度
fruits = ["apple", "banana", "cherry", "date", "elderberry"]
for i in range(len(fruits)):
print(fruits[i])
# 推荐:预先计算列表长度
n = len(fruits)
for i in range(n):
print(fruits[i])
# 更好的方法:直接遍历列表元素
for fruit in fruits:
print(fruit)# 检查元素是否在列表中(较慢)
numbers_list = list(range(10000))
if 9999 in numbers_list:
print("找到元素")
# 检查元素是否在集合中(较快)
numbers_set = set(range(10000))
if 9999 in numbers_set:
print("找到元素")# 处理大文件时使用生成器逐行读取
# 不推荐:一次读取整个文件到内存
with open("large_file.txt") as f:
lines = f.readlines() # 可能占用大量内存
for line in lines:
process(line)
# 推荐:使用生成器逐行读取
with open("large_file.txt") as f:
for line in f: # 文件对象是可迭代的,每次只读取一行
process(line)# 读取文件内容
with open("example.txt", "r") as file:
for line in file:
print(line.strip()) # 打印每行内容,去除行尾的换行符
# 写入多行数据
lines = ["Line 1", "Line 2", "Line 3"]
with open("output.txt", "w") as file:
for line in lines:
file.write(line + "
")
# 处理CSV文件
import csv
with open("data.csv", "r") as file:
reader = csv.reader(file)
for row in reader:
print(row) # 每行作为一个列表返回# 计算列表元素的总和
numbers = [1, 2, 3, 4, 5]
total = 0
for num in numbers:
total += num
print(f"总和: {total}") # 输出: 总和: 15
# 查找最大值
max_value = float('-inf')
for num in numbers:
if num > max_value:
max_value = num
print(f"最大值: {max_value}") # 输出: 最大值: 5
# 筛选满足条件的元素
even_numbers = []
for num in numbers:
if num % 2 == 0:
even_numbers.append(num)
print(f"偶数: {even_numbers}") # 输出: 偶数: [2, 4]# 模拟掷骰子10次
import random
results = []
for _ in range(10): # 使用 _ 作为不需要的循环变量
roll = random.randint(1, 6)
results.append(roll)
print(f"掷骰子结果: {results}")
# 简单的猜数字游戏
import random
number = random.randint(1, 100)
guesses = 0
while True:
guess = int(input("猜一个1到100之间的数字: "))
guesses += 1
if guess < number:
print("太小了,再试一次!")
elif guess > number:
print("太大了,再试一次!")
else:
print(f"恭喜你,猜对了! 你用了 {guesses} 次尝试。")
breakPython 循环提供了强大而灵活的迭代控制能力:
在编写循环时,应遵循以下最佳实践:
通过掌握循环,你可以编写更高效、更灵活的 Python 程序。