Python中Zip与Enumerate函数的核心用法及实战练习
本文深入解析Python中zip和enumerate两个常用内置函数的用法。通过代码示例展示zip如何组合多个可迭代对象,以及enumerate如何同时获取索引与值。此外,文章包含多个实战练习,涵盖坐标字符串生成、字典构建、矩阵转置及列表元素修改,帮助开发者掌握高级数据处理技巧。
本文详细介绍Python中zip和enumerate函数的具体应用方法,旨在为读者提供实用的参考案例。
Python 中的 Zip 函数
Python 中的 Zip 函数
zip函数的主要功能是在循环处理中组合多个可迭代对象,返回一个由元组构成的迭代器。每个生成的元组包含来自各个可迭代对象在相同位置的元素。
my_zip = list(zip(['a', 'b', 'c'], [1, 2, 3]))
print(my_zip) # [('a', 1), ('b', 2), ('c', 3)]
与range()类似,zip返回的是迭代器而非列表,因此需要将其转换为列表或通过循环遍历才能查看具体元素内容。
letters = ['a', 'b', 'c']
nums = [1, 2, 3]
for letter, num in zip(letters, nums):
print("{}: {}".format(letter, num))
运行结果如下所示:
a: 1 b: 2 c: 3
除了将两个列表组合外,还可以利用星号操作符对列表进行解包,从而返回包含原始数据的单个元组。
some_list = [('a', 1), ('b', 2), ('c', 3)]
letters, nums = zip(*some_list)
print(letters) # ('a', 'b', 'c')
print(nums) # (1, 2, 3)
Python 中的 Enumerate 函数
Python 中的 Enumerate 函数
enumerate是一个内置函数,返回包含索引和值的元组迭代器。当需要在循环中同时访问可迭代对象的元素及其索引时,该函数非常常用。
具体代码示例如下:
letters = ['a', 'b', 'c', 'd', 'e']
for i, letter in enumerate(letters):
print(i, letter)
程序输出结果如下:
0 a 1 b 2 c 3 d 4 e
Python 中 Zip 和 Enumerate 的综合练习
Python 中 Zip 和 Enumerate 的综合练习
尝试使用zip编写一个for循环,生成指定格式字符串并追加到points列表中。字符串格式要求为label: x, y, z,例如第一个坐标对应的字符串应为F: 23, 677, 4。
参考解决方案如下:
x_coord = [23, 53, 2, -12, 95, 103, 14, -5]
y_coord = [677, 233, 405, 433, 905, 376, 432, 445]
z_coord = [4, 16, -6, -42, 3, -6, 23, -1]
labels = ["F", "J", "A", "Q", "Y", "B", "W", "X"]
points = []
# write your for loop here
for label, x, y, z in zip(labels, x_coord, y_coord, z_coord):
points.append(label+": " + str(x) + ', ' + str(y) + ', ' + str(z))
for point in points:
print(point)
输出结果如下:
F: 23, 677, 4 J: 53, 233, 16 A: 2, 405, -6 Q: -12, 433, -42 Y: 95, 905, 3 B: 103, 376, -6 W: 14, 432, 23 X: -5, 445, -1
利用zip创建一个名为cast的字典,以names列表作为键,heights列表作为值。
参考解决方案如下:
cast_names = ["Barney", "Robin", "Ted", "Lily", "Marshall"]
cast_heights = [72, 68, 72, 66, 76]
cast = dict(zip(cast_names,cast_heights))
print(cast)
程序输出结果:
{'Barney': 72, 'Ted': 72, 'Robin': 68, 'Lily': 66, 'Marshall': 76}
将cast元组解包为两个独立的元组,分别命名为names和heights。
参考解决方案如下:
cast = (("Barney", 72), ("Robin", 68), ("Ted", 72), ("Lily", 66), ("Marshall", 76))
# define names and heights here
names,heights = zip(*cast)
print(names) # ('Barney', 'Robin', 'Ted', 'Lily', 'Marshall')
print(heights) # (72, 68, 72, 66, 76)
使用zip将data从4x3矩阵转置为3x4矩阵。
参考解决方案如下:
data = ((0, 1, 2), (3, 4, 5), (6, 7, 8), (9, 10, 11))
data_transpose = tuple(zip(*data))
print(data_transpose) # ((0, 3, 6, 9), (1, 4, 7, 10), (2, 5, 8, 11))
利用enumerate修改列表cast,使每个元素包含姓名及对应的角色身高。例如,cast的第一个元素应从“Barney Stinson”更新为“Barney Stinson 72”。
参考解决方案如下:
cast = ["Barney Stinson", "Robin Scherbatsky", "Ted Mosby", "Lily Aldrin", "Marshall Eriksen"]
heights = [72, 68, 72, 66, 76]
for i, c in enumerate(cast):
cast[i] += ' ' + str(heights[i])
print(cast) # ['Barney Stinson 72', 'Robin Scherbatsky 68', 'Ted Mosby 72', 'Lily Aldrin 66', 'Marshall Eriksen 76']
如需了解更多Python相关知识,建议查阅本站专题:《Python函数使用技巧总结》、《Python数据结构与算法教程》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》。
希望本文所述内容能对读者的Python程序设计工作有所帮助。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













