我在 Python 中编写了一个代码来从 5 个元素的数组中找到 4 个元素的最大值和最小值

Posted

技术标签:

【中文标题】我在 Python 中编写了一个代码来从 5 个元素的数组中找到 4 个元素的最大值和最小值【英文标题】:I wrote A Code In Python To find Max And Minimum Of 4 elements out of array of 5 elements 【发布时间】:2020-02-09 13:42:17 【问题描述】:

我正在编写一个代码来计算最大值和最小值列表的总和。 5 个元素列表中的 4 个元素。我的代码工作正常,直到它被引入大号。

def miniMaxSum(arr):
    sum1=0
    small=arr[0]+arr[1]+arr[2]+arr[3]+arr[4]
    lar=0
    for i in range(0,4):
        sum1=0
        for j in range(0,4):
            if i+j<=4:
                sum1+=arr[i+j]
            else:
                sum1+=arr[(i+j)-5]
        if sum1>=lar:
            lar=sum1
        if sum1<=small:
            small=sum1
    print("Minimum:",small,"Maximum:",lar)
if __name__ == '__main__':
    arr = list(map(int, input().rstrip().split()))
    miniMaxSum(arr)

如果我使用 Small no,我会得到正确的答案。在数组中。但是当引入大号时它不能显示最小和。 例子: 396285104 573261094 759641832 819230764 364801279 最大值工作正常但最小值即将到来 2153578241 而不是 2093989309

【问题讨论】:

使用print()查看代码中不同位置的计算。或者学习如何使用调试器。 你把最小的项去掉,得到最大的四个怎么样?还是对它们进行排序并取前四个? 通常我会使用sum(sorted(arr)[:4]), sum(sorted(arr)[1:]),但我希望您尝试在没有某些功能的情况下执行此操作。 感谢@furas def miniMaxSum(arr): arr.sort() small=0 large=0 for i in range(0,4): small+=arr[i] for i in range(1,5): large+=arr[i] print(small,large) if __name__ == '__main__': arr = list(map(int, input().rstrip().split())) miniMaxSum(arr) 【参考方案1】:

通常我会使用

print("Minimum:", sum(sorted(arr)[:4]), "Maximum:", sum(sorted(arr)[1:]))

我试着理解你的代码,但只有我能把它改成这样:

def miniMaxSum(arr):
    small = arr[0] + arr[1] + arr[2] + arr[3] + arr[4]
    large = 0
    for i in range(5):
        temp = 0
        for j in range(5):
            if i != j:
                temp += arr[j]
        if temp > large:
            large = temp
        if temp < small:
            small = temp
    print("Minimum:", small, "Maximum:", large)

#arr = list(map(int, input().rstrip().split()))
miniMaxSum(arr)

使用i != j 我总是跳过一个数字,所以它总是只求和 4 个数字。

【讨论】:

【参考方案2】:

您当前代码的问题不是大数字,而是索引 3。您永远不会从计算中排除该索引,因此如果它是列表中最大的或最小的,您将得到错误的结果。

您从不跳过索引 3 的原因是您的外循环运行在 range(0, 4) 上,而内循环也在。这意味着您需要从索引 0 到 3 开始的四个项目。但您永远不会从索引 4 开始,在这种情况下会跳过索引 3。

所以你可以通过简单的修复来修复你的代码:

 for i in range(0, 5):            # replace 4 with 5 here!
    sum1=0
    for j in range(0,4):
        ...

我注意到有很多更有效的方法可以解决这个问题。例如,您可以计算列表中所有五个值的总和(您已经在 small 中这样做了,尽管使用内置的 sum 函数会更容易),然后找到单个最大值和最小值(也许使用minmax 函数)。然后,您可以通过从所有项目的总和中减去最大的单个项目来找到四个项目的最小总和,而通过减去最小的单个项目来找到四个项目的最大总和。

def miniMaxSum(arr):
    arr_sum = sum(arr)
    min_val = min(arr)
    max_val = max(arr)
    print("Minimum:", arr_sum - max_val, "Maximum:", arr_sum - min_val)

【讨论】:

以上是关于我在 Python 中编写了一个代码来从 5 个元素的数组中找到 4 个元素的最大值和最小值的主要内容,如果未能解决你的问题,请参考以下文章

XML 读取中的 XPath 性能

我在 Python 中编写了一个代码,即使我使用了 break 语句并继续,它仍然会进入 Python 中的无限循环:

是否可以编写一个函数来从 data.frame 对象创建栅格文件?

执行脚本python 3.8.5 VSCode时没有输出

我在 laravel 中的递归函数不调用自己

如何使用python从网站中提取所有链接[重复]