当前位置:  开发笔记 > 编程语言 > 正文

在python中使用enumerate()时从列表中删除元素

如何解决《在python中使用enumerate()时从列表中删除元素》经验,为你挑选了1个好方法。

Object是一个解码的json对象,包含一个名为items的列表.

obj = json.loads(response.body_as_unicode())

for index, item in enumerate(obj['items']):
   if not item['name']:
       obj['items'].pop(index)

我迭代这些项目,并希望在满足某个条件时删除项目.但是这没有按预期工作.经过一些研究后,我发现无法从列表中删除项目,同时在python中迭代此列表.但我无法将上述解决方案应用于我的问题.我尝试过一些不同的方法

obj = json.loads(response.body_as_unicode())
items = obj['items'][:]

for index, item in enumerate(obj['items']):
   if not item['name']:
       obj['items'].remove(item)

但这会删除所有项目,而不仅仅是没有名称的项目.任何想法如何解决这个问题?



1> Martijn Piet..:

迭代时不要从列表中删除项目; 迭代将跳过项目,因为迭代索引未更新以考虑已删除的元素.

相反,重建列表减去要删除的项目,并使用过滤器进行列表推导:

obj['items'] = [item for item in obj['items'] if item['name']]

或者首先创建列表的副本以进行迭代,以便删除不会改变迭代:

for item in obj['items'][:]:  # [:] creates a copy
   if not item['name']:
       obj['items'].remove(item)

您确实创建了一个副本,但是通过循环删除您要从中删除的列表来忽略该副本.

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有