You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求三个计算列表最大差值的可运行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 23:55:20