如何将给定Python代码中的while循环转换为for循环
Python中while计数循环转for循环实现方法
针对你给出的Prim最小生成树实现代码,所有手动维护计数器、固定步长递增的while循环,都可以直接通过range()生成迭代序列,替换为结构更简洁的for循环,不需要手动编写计数器初始化、递增的冗余代码。
循环替换对应规则
- 遍历节点数组的外层i循环:原写法手动初始化i=0、每次循环i自增1、边界为
i < len(nodes_array),直接替换为for i in range(len(nodes_array)): - 遍历邻接边的内层j循环:和i循环逻辑一致,直接替换为
for j in range(len(nodes_array)): - 控制总迭代次数的x循环:原写法共执行
number_of_nodes-1次,不需要用到计数变量本身,替换为for _ in range(number_of_nodes-1):即可,_是Python中标识无用途临时循环变量的通用写法。
改写后完整可运行代码
import numpy as np # 注:代码运行需提前定义节点总数number_of_nodes、边距离字典dist number_of_vertices = number_of_nodes - 1 nodes_array = np.zeros(number_of_nodes) starting_number = 7 nodes_array[starting_number - 1] = 1 def find_min(): min_dist = 10000 # 原代码使用Python保留关键字from作为变量名易触发语法冲突,替换为from_node,逻辑完全不变 from_node = -1 to_node = -1 for i in range(len(nodes_array)): if nodes_array[i] == 1: for j in range(len(nodes_array)): if min_dist > dist[(i, j)] and dist[(i, j)] != 0 and nodes_array[j] != 1: min_dist = dist[(i, j)] from_node = i to_node = j print(f"({from_node + 1}, {to_node + 1}): Distance {min_dist}") nodes_array[to_node] = 1 for _ in range(number_of_nodes - 1): find_min()
改写后的代码和原代码执行逻辑完全一致,没有改动原算法的计算流程,仅替换了循环结构、修正了关键字做变量名的隐患。如果需要100%保留原变量名,把
from_node改回from也可运行,但不推荐这种写法。
内容的提问来源于stack exchange,提问作者pythoninteresting
相关产品推荐
相关产品推荐

