本文共 3089 字,大约阅读时间需要 10 分钟。
在 Python 中,循环是处理重复性任务的核心工具。循环分为两大类:for 循环和 while 循环。通过掌握这些循环的特点和使用场景,开发者能够高效地完成各种任务。本文将从多个维度详细解析 Python 的循环机制。
for 循环是处理可迭代对象的强大工具。常见的可迭代对象包括 list、dict、set、文件内容、甚至字符串等。range 是一个常用的可迭代对象,它生成有头无尾的序列。以下是 for 循环的典型用法:
for i in set((1, 2, 3)): print(i)
输出:123
import stringlist_num = list(string.digits)for i in list_num: if int(i) % 2 == 0: print(i)
输出:02468
for i in range(3): print(i)
输出:012
for i in range(1, 9): if int(i) % 2 == 0: print(i)
输出:2468
enumerate 是一个强大的工具,它将遍历器和索引结合起来,适合需要同时处理元素及其位置的场景:
list_val = [1, 2, 3, 5, 8]for idx, val in enumerate(list_val): print(idx, val)
输出: 0 1 1 2 2 3 3 5 4 8
zip 用于同时遍历多个列表,并按顺序打包元素:
list_1 = list(string.digits[:3])list_2 = list(string.ascii_lowercase[:3])list_3 = list(string.ascii_uppercase[:3])print(list_1, list_2, list_3)
输出:012 abc ABC
list_merge_1 = list(zip(list_1, list_2, list_3))print(list_merge_1)
输出:[('0', 'a', 'A'), ('1', 'b', 'B'), ('2', 'c', 'C')]
list_merge_2 = [i + j + k for (i, j, k) in zip(list_1, list_2, list_3)]print(list_merge_2)
输出:['0aA', '1bB', '2cC']
list_merge_3 = [i + j for i in list('123') for j in list('ABC')]print(list_merge_3) 输出:['1A', '1B', '1C', '2A', '2B', '2C', '3A', '3B', '3C']
while 循环更灵活,适用于处理未知或动态的循环条件。它结合了 for 和 if 的特性,适合需要多次尝试或者在不确定条件时使用:
x = 2while (x > 1): print('这个值大于1') break 输出:这个值大于1
idx = 1while (idx < 5): print(idx) idx += 1
输出:1234
循环的另一种实现方式是通过函数来模拟。list comprehension、map、iter 等工具可以帮助开发者实现循环效果:
num_odd = [i for i in range(1, 10) if i % 2 == 1]print(num_odd)
输出:[1, 3, 5, 7, 9]
list(map(lambda x: x ** 2, range(4)))
输出:[0, 1, 4, 9]
list_words = ['life', 'is', 'short', 'use', 'python']list(map(lambda x: len(x), list_words))
输出:[4, 2, 5, 3, 6]
iter 和生成器是基于可迭代对象的另一种实现方式,生成器可以在定义时就开始迭代:
vals_iter = iter(list(range(3)))print(next(vals_iter))
输出:0
class test_iter: def __init__(self): self.a = 1 self.b = 1 def __iter__(self): return self def __next__(self): x = self.a self.a, self.b = self.b, self.a + self.b return xfb = test_iter()for i in range(6): print(next(fb))
输出:112358
生成器和迭代器的主要区别在于生成器是在定义时就开始迭代,而迭代器是在调用时开始迭代:
def num_even(x): while (x > 0): if x % 2 == 0: yield x x -= 1x = num_even(9)for i in x: print(i)
输出:8642
break 用于跳出循环,continue 用于跳过当前循环体。pass 语句用于占位,但在实际应用中较少使用:
for i in range(5): print(i) if i == 2: break print('不会出现') 输出:012
for i in range(5): if i == 2: continue print('不会出现') print(i) 输出:0134
i = 1while (i < 5): print(i) break print('不会出现') 输出:1
i = 1while (i < 5): print(i) i += 1 if i == 2: continue print('不会出现') 输出:1234
嵌套循环适用于多层循环结构:
for i in range(3): for j in list('abc'): if j == 'b': break print(i, j) 输出: 0 a 1 a 2 a
for i in range(3): for j in list('abc'): if i == 1 or j == 'b': continue print(i, j) 输出: 0 a 0 c 2 a 2 c
通过以上内容,可以清楚地看到 Python 在不同场景下的循环应用。理解这些循环的特点和使用场景,能够帮助开发者更高效地完成编程任务。
转载地址:http://qlofk.baihongyu.com/