Python遍历列表过滤最低值时删除元素出现非预期结果求助
问题原因
- 代码中
items2 = items属于引用赋值,两个变量指向同一个列表对象,修改items的同时会直接修改items2,在遍历items2的过程中删除列表元素,会导致迭代器索引错位,出现漏遍历、误删除的异常表现。 - 原双层循环的逻辑冗余且不稳定:只要匹配到任意一个同名称且价格更低的条目就删除当前元素,配合迭代中的列表修改操作,会导致判断逻辑完全混乱,甚至出现最低价条目被误删的情况。
正确实现方案
你的需求是保留每个物品名称对应的最低价格条目,可先统计每个名称的最低价,再一次性过滤列表,避免遍历过程中修改原列表:
items=[['Yellow Goblin Egg', 25000], ['Yellow Goblin Egg', 46000], ['Yellow Goblin Egg', 46000], ['Yellow Goblin Egg', 46000], ['Yellow Goblin Egg', 46000], ['Yellow Goblin Egg', 46000], ['Yellow Goblin Egg', 46000], ['Yellow Goblin Egg', 50000], ['Yellow Goblin Egg', 58000], ['Yellow Goblin Egg', 59000], ['Yellow Goblin Egg', 60000], ['Yellow Goblin Egg', 60000], ['Yellow Goblin Egg', 70000], ['Yellow Goblin Egg', 70000], ['Yellow Goblin Egg', 72000], ['Yellow Goblin Egg', 73000], ['Yellow Goblin Egg', 73000], ['Yellow Goblin Egg', 73000], ['Yellow Goblin Egg', 73000], ['Yellow Goblin Egg', 73000], ['Yellow Goblin Egg', 73000], ['Yellow Goblin Egg', 73000], ['Yellow Goblin Egg', 73000], ['Yellow Goblin Egg', 73000], ['Yellow Goblin Egg', 73000], ['Yellow Goblin Egg', 74000], ['Yellow Goblin Egg', 75000], ['Yellow Goblin Egg', 80000], ['Yellow Goblin Egg', 130000], ['Yellow Goblin Egg', 200000], ['Yellow Repelling Candle', 1300000], ['Yellow Repelling Candle', 1500000], ['Forceful Yellow Crab Hat of Celebration', 14999999], ['Hurtful Yellow Crab Hat of Celebration', 15000000], ['Bloody Yellow Crab Hat of Celebration', 15000000], ['Yellow Crab Hat of Celebration', 15000000], ['Itchy Yellow Crab Hat of Celebration', 16600000], ['Itchy Yellow Crab Hat of Celebration', 16800000], ['Bloody Yellow Crab Hat of Celebration', 17777777], ['Yellow Crab Hat of Celebration', 18000000], ['Yellow Crab Hat of Celebration', 18990000], ['Yellow Crab Hat of Celebration', 19000000], ['Itchy Yellow Crab Hat of Celebration', 20000000], ['Shaded Yellow Crab Hat of Celebration', 20444000], ['Shaded Yellow Crab Hat of Celebration', 25000000], ['Itchy Yellow Crab Hat of Celebration', 30000000], ['Yellow Crab Hat of Celebration', 30000000], ['Yellow Goblin Egg', 40000000], ['Neon Yellow Sheep Skin', 42000000], ['Neon Yellow Sheep Skin', 43000000], ['Neon Yellow Sheep Skin', 44000000], ['Neon Yellow Sheep Skin', 58000000], ['Neon Yellow Sheep Skin', 59700000], ['Unpleasant Yellow Crab Hat of Celebration', 75000000]] # 统计每个物品的最低价格 min_price = {} for name, price in items: if name not in min_price or price < min_price[name]: min_price[name] = price # 过滤列表,保留所有最低价条目 filtered_items = [item for item in items if item[1] == min_price[item[0]]] print(filtered_items)
如果需要每个名称仅保留1条最低价条目,将第二步过滤逻辑替换为以下代码即可:
filtered_items = [[name, price] for name, price in min_price.items()]
内容的提问来源于stack exchange,提问作者Samuel Liebert
相关产品推荐
相关产品推荐

