(十三)枚举、配对与输出拆包
1. enumerate 同时提供位置与元素
# 每轮返回一个二元组,左边两个名称分别接收编号和书名。
titles = ["Python", "NumPy", "Pygame"]
for number, title in enumerate(titles, start=1):
print(number, title)start=1 让显示编号从 1 开始,并没有改变列表仍从 0 开始的下标。它把“给每个元素配一个连续编号”的动作交给 enumerate,循环变量仍然是得到的结果。
2. zip 按位置配对多个数据来源
# 每次从两个列表各取一项,组成一对。
titles = ["Python", "NumPy"]
minutes = [45, 30]
for title, value in zip(titles, minutes):
print(title, value)默认的 zip 在最短的数据源结束时停止。给 titles 多加一个书名,最后一个书名就没有配对输出。需要把缺少配对当作数据问题时,可以使用 zip(titles, minutes, strict=True),长度不一致时会报 ValueError。
3. 把一个序列拆成函数参数
# 第一行把整个列表作为一个参数;第二行把三个元素拆成三个参数。
numbers = [10, 20, 30]
print(numbers)
print(*numbers, sep=" / ")输出 [10, 20, 30] 和 10 / 20 / 30。赋值左边的 *rest 把多项收集起来,调用括号里的 *numbers 把一个可迭代对象拆成多项参数。动作方向不同,阅读时先看星号位于接收位置还是调用位置。