求三个计算列表最大差值的可运行Python代码(已完成一个)
修正计算列表最大差值的两种错误实现方法
方法一:双重循环遍历所有两两组合的错误修正
错误原因
代码里的判断条件括号位置完全错误:
if (abs(arr[i] - arr[j] > max_diff)):
这里实际是先判断arr[i] - arr[j] > max_diff(得到布尔值True/False),再对布尔值取绝对值(True对应1,False对应0),完全没有正确比较差值的绝对值与当前最大差值。
修正后的代码
from sys import stdin, stdout def readln(): return stdin.readline().rstrip() def outln(n): stdout.write(str(n)) stdout.write("\n") n = int(input("")) arr = [int(i) for i in readln().split()] tam = len(arr) max_diff = 0 if len(arr) != n: print("the number of elements in the list is not correct") else: for i in range(tam): for j in range(i, tam): current_diff = abs(arr[i] - arr[j]) if current_diff > max_diff: max_diff = current_diff outln(max_diff)
逻辑说明
- 每次计算当前两两元素的绝对差值,存入
current_diff(避免重复计算,也让逻辑更清晰) - 比较
current_diff与当前记录的max_diff,若更大则更新max_diff - 遍历完所有组合后,
max_diff即为列表的最大差值
方法三:维护最值变量的错误修正
错误原因
更新max的if语句没有缩进,处于for循环外部,只会在循环结束后执行一次,且此时i是循环的最后一个索引,相当于只比较了最后一个元素与初始max,完全没遍历所有元素更新最大值。
修正后的代码
from sys import stdin, stdout def readln(): return stdin.readline().rstrip() def outln(n): stdout.write(str(n)) stdout.write("\n") n = int(input("")) arr = [int(i) for i in readln().split()] if len(arr) != n: print("the number of elements in the list is not correct") else: list_min = arr[0] list_max = arr[0] for num in arr: # 直接遍历元素比用索引更直观 if num < list_min: list_min = num if num > list_max: list_max = num outln(list_max - list_min)
逻辑说明
- 初始化
list_min和list_max为列表第一个元素 - 直接遍历列表中的每个元素
num(比用索引更简单易懂) - 对每个元素,分别判断是否小于当前最小值、大于当前最大值,满足条件则更新对应变量
- 遍历结束后,最大值减最小值就是最大差值(无需取绝对值,因为最大值必然大于等于最小值)
内容的提问来源于stack exchange,提问作者Fausto Faustino
相关产品推荐
相关产品推荐

