我为什么在这种情况下收到了“min()参数为空序列”的错误?

2024-05-19 18:48:32 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,我试图解决这个python问题,在实践中,我必须从列表中的5个整数中找出最小和最大4个整数的和。我的逻辑似乎是好的,因为它是工作的最大数组,但我不知道为什么它有一个问题,以工作的最小数组。你知道吗

代码

arr=list(map(int, input().split()))

def miniMaxSum(arr):
    maxarr=arr
    minarr=arr
    minsum=0
    maxsum=0
    for i in range(4):
        maxsum+=max(maxarr)
        maxarr.remove(max(maxarr))
        minsum+=min(minarr)
        minarr.remove(min(minarr))
    print(minsum,maxsum)

miniMaxSum(arr)

输入

10 2 5 8 3

预期产量*

18 26

但它给了我这个错误

<ipython-input-1-2cb97cb38fd0> in miniMaxSum(arr)
      9         maxsum+=max(maxarr)
     10         maxarr.remove(max(maxarr))
---> 11         minsum+=min(minarr)
     12         minarr.remove(min(minarr))
     13     print(minsum,maxsum)

ValueError: min() arg is an empty sequence

Tags: ininput整数数组minmaxremoveprint
1条回答
网友
1楼 · 发布于 2024-05-19 18:48:32

当您将一个不可变对象(例如,list)传递到函数中时,实际上是通过引用传递它。通过在删除之前和之后打印出minarr,您可以很容易地看到这一点:

def miniMaxSum(arr):
    maxarr=arr
    minarr=arr
    minsum=0
    maxsum=0
    for i in range(4):
        print(i)
        print(minarr)
        maxsum+=max(maxarr)
        maxarr.remove(max(maxarr))
        print(minarr)
        minsum+=min(minarr)
        minarr.remove(min(minarr))
    print(minsum,maxsum)

要解决此问题,可以创建列表的副本:

maxarr=arr.copy()
minarr=arr.copy()

还有。。。只是一个建议。。。如果计算整个列表的和s,就会容易得多。然后你可以设置

minsum = s - max(arr)
maxsum = s - min(arr)

相关问题 更多 >