Skip to content Skip to sidebar Skip to footer

Remove Element From List When Using Enumerate() In Python

Object is a decoded json object that contains a list called items. obj = json.loads(response.body_as_unicode()) for index, item in enumerate(obj['items']): if not item['name'

Solution 1:

Don't remove items from a list while iterating over it; iteration will skip items as the iteration index is not updated to account for elements removed.

Instead, rebuild the list minus the items you want removed, with a list comprehension with a filter:

obj['items'] = [item foritemin obj['items'] if item['name']]

or create a copy of the list first to iterate over, so that removing won't alter iteration:

foriteminobj['items'][:]:  # [:]createsacopyifnotitem['name']:
       obj['items'].remove(item)

You did create a copy, but then ignored that copy by looping over the list that you are deleting from still.

Solution 2:

Use a while loop and change the iterator as you need it:

obj = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# remove all items that are smaller than 5index = 0# while index in range(len(obj)): improved according to commentwhileindex < len(obj):
    if obj[index] < 5:
        obj.pop(index)
        # do not increase the index hereelse:
        index = index + 1print obj

Note that in a for loop the iteration variable cannot be changed. It will always be set to the next value in the iteration range. Therefore the problem is not the enumerate function but the for loop.

And in the future please provide a verifiable example. Using a json object in the example is not sensible because we do not have this object.

Post a Comment for "Remove Element From List When Using Enumerate() In Python"