首页 > 解决方案 > 如何在python中删除和更改附加列表?

问题描述

我有两个类,并且我已经将一些项目附加到对象,但是如果匹配并删除不匹配的对象ve,我需要更改这些项目。id

  class Env:

       def __init__(self):

          self.ve = []
       def add_new_ve(self, start_position, start_di, vel,id):
           self.ve.append(V(start_position, start_di, vel,id))  
           self.ve.remove(id)

  class V:


    def __init__(self,start_position, start_di, vel,id):
        self.id=id
        self.position = start_position
        self.direction = start_di
        self.velocity = vel

但我收到了这个错误

self.ve.remove(id)
ValueError: list.remove(x): x not in list

标签: python

解决方案


您需要将V对象传递给self.ve.remove(),而不是id- 通知,它self.veV对象列表,而不是ids 列表。创建一个没有对象的新列表会更简单(所有具有相同对象的对象都id将被删除):

def add_new_ve(self, start_position, start_di, vel, id):
    # remove old objects with the same id
    self.ve = [x for x in self.ve if x.id != id]
    # add new object with that id
    self.ve.append(V(start_position, start_di, vel, id))

另一种选择是实现一个find()方法,该方法返回一个V给定它的对象id就是您可以传递给的对象remove(),前提是您还实现了__hash____eq__in V。正如我所说,我的第一个解决方案更简单。


推荐阅读