在这种情况下,为什么会出现“ min()arg为空序列”错误?

时间:2019-06-06 07:37:48

标签: python python-3.x

因此,我尝试通过实践解决此python问题,即必须从列表中的5个整数中找到最小和最大4个整数的和。我的逻辑似乎很好,因为它适用于max数组,但我不知道为什么在min数组上工作会有问题。

代码

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

1 个答案:

答案 0 :(得分:1)

当您将不可变对象(例如列表)传递给函数时,实际上是通过引用传递它。通过在删除前后打印出docs_view = DocsView( static_folder=os.path.abspath("plugins/docs/build/html"), static_url_path="/", category="My Documentation", name="Plugins", endpoint="my_docs" ) ,您可以轻松地看到这一点:

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