Python列表遍历的三种方法:索引、for循环与while循环

74 阅读6分钟

一、引言:列表遍历在实际应用中的重要性

列表遍历是Python编程中最基础也最频繁的操作之一。无论是处理用户数据、分析日志信息还是操作配置文件,都需要遍历列表中的每一个元素。掌握不同的遍历方法不仅能提高代码效率,还能让程序逻辑更加清晰。本文将详细讲解Python中三种主要的列表遍历方式:索引访问、for循环遍历和while循环遍历,并通过实际的学生信息管理案例演示它们的应用场景。

二、列表定义与格式化输出

案例:学生信息管理与格式化输出

问题描述:创建一个包含学生信息的列表,并使用不同的方式遍历和输出信息。

#创建一个列表users,列表中有学号,姓名,性别,年龄,家庭地址元素
#输出我叫XX,家住在:XXXXX,今年XX岁
users = [20240025634,'张三','男',25,"湖北省潜江市师范路"]
print("我叫",users[1],",家住在",users[4],",今年",users[3],"岁")
print("我叫{},家住在{},今年{}岁".format(users[1],users[4],users[3]))
print("----------------------数组名[索引]")
print(users[0])
print(users[1])
print(users[2])
print(users[3])
print(users[4])
print("------------------for")
j = 0
for i in users:
    print(users[j])
    j = j+1
    print(i)
print("---------------while")
i = 0
while i < len(users):
    print(users[i])
    i = i+1

运行结果:

11.png 代码分析:

这段代码展示了学生信息列表的创建和三种不同的遍历方式:

  1. 列表定义

    • users = [20240025634,'张三','男',25,"湖北省潜江市师范路"]
    • 列表中包含5个元素:学号(整数)、姓名(字符串)、性别(字符串)、年龄(整数)、地址(字符串)
    • 不同类型的数据可以混合存储在同一个列表中
  2. 格式化输出

    • 第一种:print("我叫",users[1],",家住在",users[4],",今年",users[3],"岁")
      • 使用逗号分隔,自动添加空格
      • 直接通过索引访问列表元素
    • 第二种:print("我叫{},家住在{},今年{}岁".format(users[1],users[4],users[3]))
      • 使用format()方法格式化字符串
      • 更清晰,代码可读性更好

三、索引直接访问

分析索引访问部分

代码段:

print("----------------------数组名[索引]")
print(users[0])
print(users[1])
print(users[2])
print(users[3])
print(users[4])

分析:

索引访问是最基础的列表访问方式:

语法格式列表名[索引]

  • 索引从0开始计数
  • users[0]:第一个元素(学号)
  • users[1]:第二个元素(姓名)
  • users[2]:第三个元素(性别)
  • users[3]:第四个元素(年龄)
  • users[4]:第五个元素(地址)

四、for循环遍历

分析for循环遍历部分

代码段:

print("------------------for")
j = 0
for i in users:
    print(users[j])
    j = j+1
    print(i)

分析:

for循环是Python中最优雅的遍历方式:

  1. 基本语法

    • for 变量 in 列表:
    • 每次循环,变量自动获取列表中的一个元素
  2. 代码执行过程

    • 第一次循环:i = 20240025634(学号)
      • print(users[0]) → 20240025634
      • print(i) → 20240025634
    • 第二次循环:i = '张三'(姓名)
      • print(users[1]) → 张三
      • print(i) → 张三
    • 依此类推,直到遍历完所有元素
  3. 代码问题

    • 这里的写法有些冗余,实际上不需要同时使用索引和元素变量
    • 更简洁的写法:直接使用for item in users: print(item)
  4. 优化后的for循环

print("优化后的for循环遍历:")
for item in users:
    print(item)

# 如果需要索引,可以使用enumerate()
print("\n使用enumerate()同时获取索引和值:")
for index, value in enumerate(users):
    print(f"索引{index}: {value}")

五、while循环遍历

分析while循环遍历部分

代码段:

print("---------------while")
i = 0
while i < len(users):
    print(users[i])
    i = i+1

分析:

while循环提供了更灵活的控制方式:

  1. 语法结构

    • 初始化计数器:i = 0
    • 循环条件:i < len(users)(索引小于列表长度)
    • 索引递增:i = i+1
  2. 执行过程

    • len(users)获取列表长度(5)
    • 当i=0时:打印users[0],i变为1
    • 当i=1时:打印users[1],i变为2
    • ...
    • 当i=4时:打印users[4],i变为5
    • 当i=5时:不满足i<5,循环结束
  3. 特点

    • 需要手动控制循环条件
    • 更灵活,可以自由控制循环流程
    • 适用于复杂的循环逻辑

六、三种遍历方法对比

特性索引访问for循环while循环
语法简洁性优秀一般
可读性优秀一般
灵活性中等
适用场景访问特定元素遍历所有元素复杂循环逻辑
是否需要索引需要可选需要
代码安全性易越界安全易越界

七、实际应用与扩展

1. 字典列表(更实用的数据结构)

# 使用字典列表存储学生信息,更结构化
students = [
    {"学号": 20240025634, "姓名": "张三", "性别": "男", "年龄": 25, "地址": "湖北省潜江市师范路"},
    {"学号": 20240025635, "姓名": "李四", "性别": "女", "年龄": 23, "地址": "北京市海淀区"},
    {"学号": 20240025636, "姓名": "王五", "性别": "男", "年龄": 24, "地址": "上海市浦东新区"}
]

# 使用for循环遍历字典列表
print("学生信息列表:")
for student in students:
    print(f"姓名:{student['姓名']},学号:{student['学号']},年龄:{student['年龄']}")

# 查找特定学生
target_name = "李四"
for student in students:
    if student["姓名"] == target_name:
        print(f"\n找到学生:{target_name}")
        print(f"详细信息:{student}")
        break

2. 带条件的遍历

# 只输出成年学生信息
print("成年学生信息:")
for student in students:
    if student["年龄"] >= 18:
        print(f"{student['姓名']}{student['年龄']}岁")

# 使用while循环实现复杂逻辑
print("\n使用while循环实现分页显示:")
page_size = 2  # 每页显示2条
current_page = 0
total_students = len(students)

while current_page * page_size < total_students:
    start = current_page * page_size
    end = min((current_page + 1) * page_size, total_students)
    
    print(f"\n第{current_page + 1}页:")
    for i in range(start, end):
        print(f"  {students[i]['姓名']}")
    
    current_page += 1

3. 列表推导式(高级遍历技巧)

# 提取所有学生姓名
names = [student["姓名"] for student in students]
print("所有学生姓名:", names)

# 提取年龄大于23的学生信息
older_students = [student for student in students if student["年龄"] > 23]
print("\n年龄大于23的学生:")
for student in older_students:
    print(f"  {student['姓名']}{student['年龄']}岁")

# 计算平均年龄
average_age = sum(student["年龄"] for student in students) / len(students)
print(f"\n学生平均年龄:{average_age:.1f}岁")