杰瑞科技汇

Python列表for循环创建有哪些方法?

for 循环是 Python 中用于迭代(即遍历)序列(如列表、元组、字符串)或其他可迭代对象(如字典、集合)的主要方式,它的核心思想是:对于序列中的每一个元素,都执行一次相同的操作。

Python列表for循环创建有哪些方法?-图1
(图片来源网络,侵删)

基础语法

for 循环的基本语法结构如下:

for variable in iterable:
    # 循环体(要执行的代码块)
    # 这里的代码会针对 iterable 中的每一个元素执行一次
  • variable:这是一个临时变量,它会依次接收 iterable 中每个元素的值,你可以自己给这个变量起任何合法的名字。
  • in:这是 Python 的关键字,表示“在...之中”。
  • iterable:任何可以被遍历的对象,比如列表、字符串、元组等。
  • 冒号是语法的一部分,表示循环体的开始。
  • 缩进:循环体内的所有代码都必须缩进(通常是 4 个空格),这定义了哪些代码属于循环体。

在列表上的基本应用

让我们从最简单的例子开始:遍历一个列表并打印其中的每一个元素。

示例 1:遍历并打印列表元素

# 定义一个列表
fruits = ['apple', 'banana', 'cherry']
# 使用 for 循环遍历列表
for fruit in fruits:
    print(fruit)

输出:

Python列表for循环创建有哪些方法?-图2
(图片来源网络,侵删)
apple
banana
cherry

代码解析:

  1. Python 从 fruits 列表中取出第一个元素 'apple',并将其赋值给临时变量 fruit
  2. 执行循环体内的代码 print(fruit),打印出 apple
  3. 循环继续,Python 从 fruits 列表中取出第二个元素 'banana',赋值给 fruit
  4. 再次执行 print(fruit),打印出 banana
  5. 重复这个过程,直到列表中的所有元素都被处理完毕。

在循环中访问元素的索引

我们不仅需要元素的值,还需要知道它在列表中的位置(索引),有几种方法可以实现。

使用 range()len()

这是最传统的方式,通过索引来访问列表元素。

fruits = ['apple', 'banana', 'cherry']
# range(len(fruits)) 会生成一个从 0 到 len(fruits)-1 的序列
for i in range(len(fruits)):
    print(f"索引 {i} 对应的元素是: {fruits[i]}")

输出:

Python列表for循环创建有哪些方法?-图3
(图片来源网络,侵删)
索引 0 对应的元素是: apple
索引 1 对应的元素是: banana
索引 2 对应的元素是: cherry

使用 enumerate() (推荐)

enumerate() 是 Python 内置的函数,它可以同时返回元素的索引和值,代码更简洁、更 Pythonic。

fruits = ['apple', 'banana', 'cherry']
# enumerate(fruits) 会返回 (索引, 值) 这样的元组对
for index, fruit in enumerate(fruits):
    print(f"索引 {index} 对应的元素是: {fruit}")

输出:

索引 0 对应的元素是: apple
索引 1 对应的元素是: banana
索引 2 对应的元素是: cherry

在循环中修改列表

这是一个非常重要的知识点:直接在遍历列表的同时修改该列表(例如添加或删除元素)可能会导致意外的结果或错误。

错误示例:

# 目标:删除所有长度小于 5 的单词
words = ['apple', 'kiwi', 'banana', 'pear', 'fig']
# 错误的做法!
for word in words:
    if len(word) < 5:
        words.remove(word) # 在遍历时删除元素
print(words) # 你可能会以为结果是 ['apple', 'banana', 'pear'],但实际是...

错误输出:

['apple', 'banana', 'fig']

为什么会出错?

  1. 循环开始时,words['apple', 'kiwi', 'banana', 'pear', 'fig']
  2. word 变为 'apple',不满足 len(word) < 5,不删除。
  3. word 变为 'kiwi',满足条件,words 变为 ['apple', 'banana', 'pear', 'fig']
  4. 关键步骤:下一个 word 不是 'banana',而是列表中 'kiwi' 原来的位置,也就是现在的 'pear''banana' 被跳过了!
  5. word 变为 'pear',不满足条件。
  6. word 变为 'fig',满足条件,words 变为 ['apple', 'banana', 'pear']

正确的做法: 创建一个原始列表的副本进行迭代,或者创建一个新列表来存放结果。

正确做法 1:使用切片创建副本

words = ['apple', 'kiwi', 'banana', 'pear', 'fig']
# 使用 words[:] 创建一个原始列表的副本进行迭代
for word in words[:]: # 注意这里的 [:]
    if len(word) < 5:
        words.remove(word)
print(words) # 输出: ['apple', 'banana', 'pear']

正确做法 2:创建一个新列表(更推荐)

这种方法通常更清晰、更安全,也符合函数式编程的思想。

words = ['apple', 'kiwi', 'banana', 'pear', 'fig']
new_words = []
for word in words:
    if len(word) >= 5:
        new_words.append(word)
print(new_words) # 输出: ['apple', 'banana', 'pear']

列表推导式 (List Comprehension)

列表推导式是 for 循环的一种高级、简洁的写法,用于从一个列表创建一个新列表,它非常高效且易读。

语法:

[expression for item in iterable if condition]
  • expression:要生成的新元素的表达式。
  • for item in iterable:循环部分。
  • if condition:(可选)过滤条件。

示例:将上面的 "正确做法 2" 用列表推导式重写

words = ['apple', 'kiwi', 'banana', 'pear', 'fig']
# 将 for 循环和 if 判断压缩成一行
new_words = [word for word in words if len(word) >= 5]
print(new_words) # 输出: ['apple', 'banana', 'pear']

列表推导式的威力:

示例:对列表中的每个数字进行平方

numbers = [1, 2, 3, 4, 5]
# 使用 for 循环
squared_numbers_loop = []
for num in numbers:
    squared_numbers_loop.append(num ** 2)
# 使用列表推导式
squared_numbers_comp = [num ** 2 for num in numbers]
print(squared_numbers_loop)   # 输出: [1, 4, 9, 16, 25]
print(squared_numbers_comp)  # 输出: [1, 4, 9, 16, 25]
用途 代码示例 说明
遍历元素 for item in my_list: 最基础、最常用的用法。
遍历索引和值 for index, value in enumerate(my_list): 推荐方式,代码清晰。
修改列表 for item in my_list[:]: 遍历时修改原列表的安全方法。
创建新列表 new_list = [item for item in my_list if condition] 列表推导式,简洁高效。

掌握 for 循环是学习 Python 的关键一步,从基础的遍历开始,逐步掌握 enumerate 和列表推导式,你的 Python 代码会变得越来越优雅和强大。

分享:
扫描分享到社交APP
上一篇
下一篇