未使用内置函数查找列表最小值,输出为7的错误排查
问题分析与修正
先拆解你的代码问题:
初始化错误:你把
n初始成了0,但列表里有大量比0小的数(比如-200、-20),后续逻辑如果没正确覆盖这些数,结果必然出错。正确的做法是把n初始化为列表的第一个元素,从列表内部的元素开始比较。循环逻辑完全跑偏:你现在的嵌套循环逻辑是,对每个
i位置的元素,遍历前面所有j位置的元素,只要num[j] < num[i]就把n改成num[j]。这根本不是找全局最小值的逻辑——你没有拿当前记录的最小值n和每个元素做比较,反而只是在i的元素比j大的时候更新n,最后n只会是最后一次满足num[j] < num[i]的元素,完全和全局最小值无关。
你说输出是7,大概率是最后几次循环里,某个j位置的7刚好满足7 < num[i],把n覆盖成了7,之前找到的更小值被冲掉了。
修正后的代码
不需要嵌套循环,单循环就能搞定:
num = [4,5,6,3,1,77,-3,-5,-6,-20,4,7,-200,5,7] # 初始化n为列表第一个元素 n = num[0] for num_item in num: if num_item < n: n = num_item print(n)
运行这段代码就能得到正确的最小值-200。
如果非要用索引循环(贴近你原来的写法),可以改成这样:
num = [4,5,6,3,1,77,-3,-5,-6,-20,4,7,-200,5,7] n = num[0] for i in range(len(num)): if num[i] < n: n = num[i] print(n)
内容的提问来源于stack exchange,提问作者user20666007
相关产品推荐
相关产品推荐

