-2

So, I was trying to solve this python problem for practice in which I have to find the sum of the minimum and maximum 4 integers out of the 5 in a list. My logic seems to be fine as it is working for the max array but I don't know why is it having a problem to work on the min array.

CODE

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)

INPUT

10 2 5 8 3

EXPECTED OUTPUT*

18 26

But it gives me this error

<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
eyllanesc
  • 235,170
  • 19
  • 170
  • 241
Neeraj Kumar
  • 515
  • 7
  • 18

1 Answers1

1

When you pass an immutable object (list, for example) into a function, you actually pass it by reference. You can see this easily by printing out minarr before and after the removal:

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)

To fix this, you can create a copy of a list:

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

Also... just a suggestion... it would be a lot easier if you calculate the sum s of the entire list. Then you can set

minsum = s - max(arr)
maxsum = s - min(arr)
Art
  • 453
  • 4
  • 12