Remove element from list when using enumerate() in python

后端 未结 2 1259
慢半拍i
慢半拍i 2021-01-21 14:35

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\']):
         


        
2条回答
  •  独厮守ぢ
    2021-01-21 14:49

    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 for item in obj['items'] if item['name']]
    

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

    for item in obj['items'][:]:  # [:] creates a copy
       if not item['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.

提交回复
热议问题