Search code examples
pythonindex-error

Odd and Unexpected "IndexError: pop index out of range"


I'm trying to append 7 numbers in a list, and times every other number by 3 (starting with 1) then place it back into the list. For some reason, the numbers '1234567' work fine and expected. However, when using the numbers '1324562' it returns and IndexError on the number 3'.

Code:

number = "1324562"
digits = []
old_list = []
total = 0

for num in number:
    num = int(num)
    digits.append(num)
    old_list.append(num)
    if digits.index(num) % 2 == 0:
        try:
            digits.insert(digits.pop(num-1), num * 3)
        except IndexError:
            print("*INCOHERENT SWEARING*")

for num in digits:
    total += num

print(digits, total)

Solution

  • The trick is to separate the index from the contents - they are not related. Here is my solution to this:

    number = "1324562"
    digits = []
    
    # enumerate returns the index number(i) and the item(n) as a tuple.
    # A string is a sequence, so we can iterate through it
    for i, n in enumerate(number):
        n = int(n)
        if i % 2 != 0:
            n *= 3
        digits.append(n)
    
    print(digits)
    

    Gives:

    [1, 9, 2, 12, 5, 18, 2]
    

    If you want the original string as a list (you have the variable old_list in your code) then you can create that with:

    old_list = [int(n) for n in number]