【学习笔记】《Python编程 从入门到实践》第4章:for循环、range()、切片与元组

第4章 操作列表

本章目标:掌握 for 循环遍历列表、range() 生成数值、切片操作、元组使用以及代码格式规范。


4.1 遍历整个列表

使用 for 循环遍历列表:

python 复制代码
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
    print(magician)

输出:

复制代码
alice
david
carolina

过程说明

  1. Python 从列表中取出第一个值 'alice',存入变量 magician
  2. 执行缩进的代码块(打印 magician
  3. 返回循环首行,取下一个值 'david',重复执行
  4. 直到列表元素用完,循环结束

4.1.1 深入地研究循环

  • 对列表中的每个元素,循环都执行指定的步骤

  • 不管列表有多少元素,Python 都会逐一处理

  • 临时变量名应具有描述性:

    python 复制代码
    for cat in cats:       # 小猫列表
    for dog in dogs:       # 小狗列表
    for item in list_of_items:  # 通用列表

4.1.2 在 for 循环中执行更多的操作

python 复制代码
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
    print(magician.title() + ", that was a great trick!")
    print("I can't wait to see your next trick, " + magician.title() + ".\n")

输出:

复制代码
Alice, that was a great trick!
I can't wait to see your next trick, Alice.

David, that was a great trick!
I can't wait to see your next trick, David.

Carolina, that was a great trick!
I can't wait to see your next trick, Carolina.

关键 :在 for 循环中,每个缩进的代码行都会对每个元素执行一次。

4.1.3 在 for 循环结束后执行一些操作

python 复制代码
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
    print(magician.title() + ", that was a great trick!")
    print("I can't wait to see your next trick, " + magician.title() + ".\n")

print("Thank you, everyone. That was a great magic show!")

不缩进的代码只执行一次,在循环结束后执行。


4.2 避免缩进错误

4.2.1 忘记缩进

python 复制代码
for magician in magicians:
print(magician)    # ❌ 没有缩进

IndentationError: expected an indented block

4.2.2 忘记缩进额外的代码行

python 复制代码
for magician in magicians:
    print(magician.title() + ", that was a great trick!")
print("I can't wait to see your next trick, " + magician.title() + ".\n")   # ❌ 忘记缩进

逻辑错误:第二条 print 只在循环结束后执行一次(仅输出最后一次的值)。Python 不会报错,但结果不符合预期。

4.2.3 不必要的缩进

python 复制代码
message = "Hello Python world!"
    print(message)    # ❌ 不该缩进却缩进了

IndentationError: unexpected indent

4.2.4 循环后不必要的缩进

python 复制代码
for magician in magicians:
    print(magician.title() + ", that was a great trick!")
    print("Thank you everyone, that was a great magic show!")   # ❌ 这条应在循环外

逻辑错误:感谢消息被重复打印了三次。

4.2.5 遗漏了冒号

python 复制代码
for magician in magicians    # ❌ 缺少冒号
    print(magician)

SyntaxError


4.3 创建数值列表

4.3.1 range() 函数

python 复制代码
for value in range(1, 5):
    print(value)
# 输出:1 2 3 4(不含5)

for value in range(1, 6):
    print(value)
# 输出:1 2 3 4 5

range(start, stop) 从 start 开始,到 stop-1 结束。

4.3.2 使用 range() 创建数字列表

python 复制代码
# range() 转列表
numbers = list(range(1, 6))
print(numbers)    # [1, 2, 3, 4, 5]

# 指定步长(偶数)
even_numbers = list(range(2, 11, 2))
print(even_numbers)    # [2, 4, 6, 8, 10]

# 生成平方数列表
squares = []
for value in range(1, 11):
    square = value ** 2
    squares.append(square)
print(squares)    # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

# 更简洁的写法(不使用临时变量)
squares = []
for value in range(1, 11):
    squares.append(value ** 2)

4.3.3 对数字列表执行统计计算

python 复制代码
>>> digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
>>> min(digits)
0
>>> max(digits)
9
>>> sum(digits)
45

4.3.4 列表解析

一行代码生成列表:

python 复制代码
squares = [value**2 for value in range(1, 11)]
print(squares)
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

语法结构

复制代码
[表达式 for 变量 in 可迭代对象]
  • for 语句末尾没有冒号
  • 表达式和 for 循环合并成一行

4.4 使用列表的一部分(切片)

4.4.1 切片

python 复制代码
players = ['charles', 'martina', 'michael', 'florence', 'eli']

print(players[0:3])        # 索引 0~2 → ['charles', 'martina', 'michael']
print(players[1:4])        # 索引 1~3 → ['martina', 'michael', 'florence']
print(players[:4])         # 开头到索引 3 → ['charles', 'martina', 'michael', 'florence']
print(players[2:])         # 索引 2 到末尾 → ['michael', 'florence', 'eli']
print(players[-3:])        # 最后三个 → ['michael', 'florence', 'eli']

4.4.2 遍历切片

python 复制代码
print("Here are the first three players on my team:")
for player in players[:3]:
    print(player.title())

4.4.3 复制列表

正确方式 --- 使用切片 [:]

python 复制代码
my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods = my_foods[:]        # 复制整个列表

my_foods.append('cannoli')
friend_foods.append('ice cream')

print(my_foods)      # ['pizza', 'falafel', 'carrot cake', 'cannoli']
print(friend_foods)  # ['pizza', 'falafel', 'carrot cake', 'ice cream']

错误方式 --- 直接赋值(两个变量指向同一个列表):

python 复制代码
friend_foods = my_foods    # ❌ 不是复制,两个变量指向同一个列表

my_foods.append('cannoli')
friend_foods.append('ice cream')
# 两个列表都包含 'cannoli' 和 'ice cream'

4.5 元组

元组 :不可变的列表,用圆括号 () 表示。

4.5.1 定义元组

python 复制代码
dimensions = (200, 50)
print(dimensions[0])    # 200
print(dimensions[1])    # 50

# ❌ 尝试修改元组元素会报错
dimensions[0] = 250     # TypeError: 'tuple' object does not support item assignment

4.5.2 遍历元组

python 复制代码
dimensions = (200, 50)
for dimension in dimensions:
    print(dimension)

4.5.3 修改元组变量

不能修改元组的元素,但可以重新赋值整个元组变量

python 复制代码
dimensions = (200, 50)
print("Original dimensions:")
for dimension in dimensions:
    print(dimension)

dimensions = (400, 100)    # 重新赋值
print("\nModified dimensions:")
for dimension in dimensions:
    print(dimension)

4.6 设置代码格式(PEP 8)

规范 说明
缩进 每级缩进使用 4 个空格,不要混用制表符和空格
行长 每行不超过 79 字符 ,注释不超过 72 字符
空行 用空行分隔代码的不同部分,但不要滥用
PEP 8 完整的 Python 代码格式指南:https://python.org/dev/peps/pep-0008/

动手试一试

4-1 比萨

python 复制代码
pizzas = ['pepperoni', 'margherita', 'hawaiian']
for pizza in pizzas:
    print("I like " + pizza + " pizza")
print("I really love pizza!")

4-2 动物

python 复制代码
animals = ['dog', 'cat', 'rabbit']
for animal in animals:
    print("A " + animal + " would make a great pet")
print("Any of these animals would make a great pet!")

4-3 数到 20

python 复制代码
for value in range(1, 21):
    print(value)

4-4 ~ 4-5 一百万

python 复制代码
numbers = list(range(1, 1000001))
print(min(numbers))
print(max(numbers))
print(sum(numbers))

4-6 奇数

python 复制代码
odd_numbers = list(range(1, 21, 2))
for number in odd_numbers:
    print(number)

4-7 3 的倍数

python 复制代码
multiples = list(range(3, 31, 3))
for number in multiples:
    print(number)

4-8 ~ 4-9 立方

python 复制代码
# 普通写法
cubes = []
for value in range(1, 11):
    cubes.append(value ** 3)
print(cubes)

# 列表解析写法
cubes = [value ** 3 for value in range(1, 11)]
print(cubes)

4-10 切片

python 复制代码
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print("The first three items in the list are:")
print(players[:3])

print("Three items from the middle of the list are:")
print(players[1:4])

print("The last three items in the list are:")
print(players[-3:])

4-11 你的比萨和我的比萨

python 复制代码
my_pizzas = ['pepperoni', 'margherita', 'hawaiian']
friend_pizzas = my_pizzas[:]

my_pizzas.append('sicilian')
friend_pizzas.append('neapolitan')

print("My favorite pizzas are:")
for pizza in my_pizzas:
    print(pizza)

print("\nMy friend's favorite pizzas are:")
for pizza in friend_pizzas:
    print(pizza)

4-13 自助餐

python 复制代码
foods = ('rice', 'noodles', 'soup', 'salad', 'bread')
for food in foods:
    print(food)

# foods[0] = 'pizza'     # ❌ 会报错

foods = ('pizza', 'noodles', 'soup', 'salad', 'cake')
for food in foods:
    print(food)

代码块汇总

python 复制代码
# for 循环
for magician in magicians:
    print(magician)

# range()
for value in range(1, 5):       # 1~4
list(range(1, 11, 2))           # [1, 3, 5, 7, 9]

# 统计
min(digits)
max(digits)
sum(digits)

# 列表解析
squares = [value**2 for value in range(1, 11)]

# 切片
players[0:3]    # 前三个
players[:4]     # 开头到索引3
players[2:]     # 索引2到末尾
players[-3:]    # 最后三个
players[:]      # 复制整个列表

# 元组
dimensions = (200, 50)     # 用圆括号
dimensions[0] = 250        # ❌ 不允许修改
dimensions = (400, 100)    # ✅ 可以重新赋值

常见错误 / 陷阱

错误类型 说明 解决
IndentationError 缩进错误(忘记缩进或多余缩进) 检查缩进级别
逻辑错误 循环内的代码只执行了一次,或循环外的代码重复执行 检查缩进是否正确
SyntaxError for 语句末尾缺冒号 在 for 行末尾加 :
TypeError 尝试修改元组元素 元组不可变,需重新赋值
列表复制失败 直接赋值导致两个变量指向同一列表 [:] 切片复制

复习要点

  • for 变量 in 列表: 遍历列表,缩进的代码块是循环体
  • range(start, stop, step) 生成数值序列(不含 stop)
  • list(range(...)) 将 range 转为列表
  • min() / max() / sum() 数字列表统计
  • 列表解析 [表达式 for 变量 in 可迭代对象]
  • 切片 list[start:end],省略 start 从头开始,省略 end 到末尾
  • list[:] 复制列表,不要用直接赋值
  • 元组(),元素不可修改,变量可重新赋值
  • PEP 8:4 空格缩进、79 字符行长、合理空行
相关推荐
程序员龙叔10 小时前
编写高质量 Skill 系列 -- 如何设计需求分析与用例生成的 SKILL
自动化测试·软件测试·python·软件测试工程师·接口测试·性能测试·skill·ai测试
用户83562907805113 小时前
使用 Python 操作 Word 内容控件
后端·python
通信小呆呆13 小时前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
H__Rick13 小时前
自动对焦学习-3
人工智能·学习·计算机视觉
Daisy Lee13 小时前
量化学习-第1章-什么是量化金融
学习·金融·datawhale
Alsn8614 小时前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
码云骑士14 小时前
32-慢查询排查全流程(下)-索引优化实战与最左前缀原则
python
YM52e14 小时前
买菜计算器小应用 - HarmonyOS ArkUI 开发实战-PC版本
学习·华为·harmonyos·鸿蒙·鸿蒙系统
小雨下雨的雨15 小时前
HarmonyOS ArkUI训练营入门-组件掌握系列-Animation 动画效果实现-PC版本
学习·华为·harmonyos·鸿蒙