简体   繁体   中英

Where am I going wrong with enumerate?

I know the answer is probably super simple, but I'm absolutely stuck on this short piece of code. The function has no effect on the input list when I run it.

def squareEven(array):
    for idx, val in enumerate(array):

        if idx % 2 == 0:
            val = val * val
        else:
            val = val

    return array

array = [1, 2, 4, 9, 20]

print(squareEven(array))

the reason is that the enumerate function does not actually change the array itself but just returns the new one for you to use in the loop. The simple solution is to save the enumerate(array) into another variable and return it at the end of your function. Keep in mind, you will get an enumerated array at the end. You could map it to convert to a form you initially passed.

Here are two ways, one bad, one good:

def squareEven(array):
    for idx in range(len(array)):
        if idx % 2 == 0:
            array[idx] = array[idx] * array[idx]
    return array

array = [1, 2, 4, 9, 20]
print(squareEven(array))

This is better, because it doesn't damage the original array as a side effect:

def squareEven(array):
    new = []
    for idx,val in enumerate(array):
        if idx % 2 == 0:
            new.append(val * val)
        else:
            new.append(val)
    return new

array = [1, 2, 4, 9, 20]

print(squareEven(array))

You can also use the list comprehension to construct a new list with squared values when the index is even.


def squareEven(array):
    return [v**2 if i % 2 == 0 else v for (i, v) in enumerate(array)]

https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM