gpt4 book ai didi

python - 在for循环中从列表中删除元素

转载 作者:行者123 更新时间:2023-12-04 07:16:56 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Why does Python skip elements when I modify a list while iterating over it?

(7 个回答)


20 天前关闭。




我有一个列表,其中包含包含字典的列表。我正在尝试检查字典中某个键的值之一,如果尝试,则从列表中删除该列表。我对这里的列表和字典层感到有些困惑,我认为我有一个很好的解决方案,但是当我按照我认为可行的方式进行操作时,它似乎与 for 循环的索引混淆,然后只有第一场比赛被删除。
这是我正在发生的事情的一个例子。

master_list = [
{"irrelevant_key": "irrevelant_value",
"releveant_key":
[{"first_value": "first_key"}, {"problem_key": 0}],
[{"second_value": "second_key"}, {"problem_key": 1}]
}]

for index, key in enumerate(master_list):
for item in master_list[index]["relevant_key"]:
if item[1]["problem_key"] == 0:
master_list[index]["relevant_key"].remove(item)
所以我确信有一种更优雅更好的方法可以通过某种理解来做到这一点,但我注意到的是,当我删除该项目时,其余项目会返回一个,因此迭代不会像我那样工作预计。

最佳答案

在循环遍历列表时从列表中删除元素不是一个好主意。您可以随时复制并更新它:

import copy
my_list= copy.deepcopy(master_list)
但是,更好的方法是使用列表推导式:
master_list = [{"irrelevant_key": "irrevelant_value", 
"relevant_key":
[[{"first_value": "first_key"}, {"problem_key": 0}],
[{"second_value": "second_key"}, {"problem_key": 1}]],
}]
for lst in master_list:
lst['relevant_key'] = [x for x in lst['relevant_key'] if x[1]['problem_key'] != 0 ]

关于python - 在for循环中从列表中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68705001/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com