Loubot Loubot - 1 year ago 60
Python Question

Recursively decrement a list by 1

Very quick and easy homework question. I have it running ok but I think there's a better

way to do it. A more Pythonic way.

Here's my code to recursively decrement each element of a list by 1.

l = range(30)
def recurseDecrMap(l, x = []):
if len(l) == 0:
return []
x.append(l[0] -1)
recurseDecrMap(l[1:], x)
return x

So thanks for any input. I'm trying to learn to do better recursion. Having trouble getting

the knack of it.

Answer Source

You can use only one argument, in my opinion it is simpler:

def recurseDecrMap(l):  
    if not l:  
        return []  
        return [l[0]-1] + recurseDecrMap(l[1:])

But as @jamylak pointed out, the complexity of this algorithm is O(N^2), since l[1:] creates a new list with references to the rest of the items in the list.

If you need efficiency, I'd recommend you using list comprehensions (Haidro's answer), but I suppose it is not a priority if you want it only for learning purposes.