# Count the number of saleable pairs of items

I want to optimize my code for following question:

A company sells dumbbells in pairs. These are weights for exercising. They receive a shipment of dumbbells weighing anywhere from 1 unit up to a certain maximum.

A pair can only be sold if their weights are sufficiently close: no greater than 1 unit difference.

Given an inventory of various weights, determine the maximum number of pairs the company can sell.

For example, if there are 2 dumbbells of weight 1, 4 of weight 2, 3 of weight 3 and 1 of weight 4, (arr = [2,4,3,1])

they can be paired as [1,1], [2,2], [2,2], [3,3], [3,4] for a total of 5 pairs.

i-th element is the number of dumbbells with a weight of i+1.

For example:

if arr  = [3,5,4,3]
number of pairs will be 7 as shown below:
initial array is to be converted to  [3(1's),5(2's),4(3's),3(4's)] i.e [1,1,1,2,2,2,2,2,3,3,3,3,4,4,4]


Now we need to make pairs like this [1,1][1,2][2,2][2,2][3,3][3,3][4,4] remaining last 4 is left as it is single. So total number of pairs is 7. Following is my solution for the same:

def taskOfPairing(arr):

n = len(arr)
count = 0
newList = []

for i, j in enumerate(arr):
newList += [i + 1]*j
print(newList)
count1 = 0
k = 1
newList.sort()
n1 = len(newList)
l=0
r=0
while r<n1:
if newList[r]-newList[l] < k:
count1 += 1
newList.pop(l)
newList.pop(r)
n1 = len(newList)
l=0
r=0
if len(newList) == 1:
break
return count1

arr= [3,5,4,3]


output = 7

My output works but only when there is small numbers in list like arr = [3,5,4,3] or [2,4,3,1].

If I try putting large numbers in list for example, arr = [100000,200000,300000,400000] my code will not work and will cause a lot of delay in execution. Can anyone let me know what I am doing wrong in this code. My apologies to stack overflow for asking naive questions.