模块课程(1/4)
for 循环和范围
Python 中的 for 循环用于迭代项目的序列:
列表、字符串、范围、字典……任何“可迭代”的东西。
parole = ["ciao", "mondo", "!"]
for p in parole:
print(p)
# ciao
# mondo
# !模式始终相同:for <variable> in <iterable>: 后跟
将为每个项目执行一次的缩进块。
range(...):生成整数间隔
range 生成一个惰性整数序列。三种形式:
range(5) # 0, 1, 2, 3, 4
range(2, 6) # 2, 3, 4, 5
range(0, 10, 2) # 0, 2, 4, 6, 8 (step)
range(5, 0, -1) # 5, 4, 3, 2, 1 (negative step)range 在右端独占,就像 slice 一样。它是一个惰性对象:
它不会为所有数字分配内存,而是一次生成一个数字。
totale = 0
for i in range(1, 11):
totale = totale + i
totale # 55 (1+2+...+10)使用索引迭代:enumerate
当您需要该项目及其索引在一起时,请使用 enumerate:
parole = ["ciao", "mondo", "!"]
for i, p in enumerate(parole):
print(i, p)
# 0 ciao
# 1 mondo
# 2 !enumerate 产生 (index, value) 对,我们直接分配给两个
通过元组解包变量(我们将在专用于的模块中看到它)
数据结构)。
并行迭代两个序列:zip
nomi = ["Ada", "Linus", "Grace"]
anni = [36, 54, 79]
for n, a in zip(nomi, anni):
print(f"{n} ha {a} anni")zip 在最短的序列处停止。
range() 和 Python 的惰性
在 Python 中, range() 函数不会在内存中分配实际列表:它返回一个惰性生成器,根据请求一次生成一个数字(例如,在 for 循环中)。这允许迭代数百万个整数,而不会导致 RAM 膨胀。要将范围值检查为列表,您可以使用 list(range(5)) 显式转换它。
自己尝试一下
使用 for 循环覆盖 range(...) 计算从 1 到 100(含)的数字总和,将其分配给“total”并对其求值。
显示提示
range(1, 101) 生成 1, 2, ..., 100(不包括右侧)。
3 次尝试后可用的解决方案
复习练习
给定列表 `words = ['uno', 'due', 'tre']`,使用枚举构建一个字符串列表 `pairs`,如 '0:uno', '1:due', '2:tre'。评估“对”。
显示提示
enumerate(words) 在每次迭代时返回 (index, value)。
3 次尝试后可用的解决方案
额外的挑战
Calculate the sum of all even numbers from 2 to 20 inclusive using a `for` loop over a `range`. Store the final sum in `even_sum` and evaluate it.
显示提示
使用 range(2, 21, 2) 仅迭代 2 到 20 之间的偶数。
3 次尝试后可用的解决方案