所以,我有两个自定义类,让它成为A类和B类.B类有一个属性,它包含多个A类实例。它还包含使用这个属性的方法:add,remove,get single以及此属性中的所有实例。
然而,除了标准和相当质疑的处理MVC模式之外,我想知道:在Python中从这个属性(数组)中删除对象的最有效和最快速的方法是什么,它实现了一些自定义(例如,通过id,title和其他属性)。
我已经实现了自己的,但对于这样一个必要的操作来说似乎太复杂了。
class Skill:
def __init__(self, id_):
self.id = id_
class Unit:
def __init__(self):
self.skills = []
def get_skills(self):
return self.skills
def get_skill(self, index):
return self.skills[index]
def add_skill(self, skill):
self.skills.append(skill)
def remove_skill(self, skill_to_remove):
self.skills = filter(lambda skill: skill.id != skill_to_remove.id, self.skills)
答案 0 :(得分:1)
如果您需要任意标准,那么过滤就可以了,但使用列表推导会略短。例如,而不是
self.skills = filter(lambda skill: skill.id != skill_to_remove.id, self.skills)
使用:
self.skills = [s for s in self.skills if s.id != skill_to_remove.id]
也可以使用切片分配就地修改列表(参见this question):
self.skills[:] = (s for s in self.skills if s.id != skill_to_remove.id)
如果您根据与"模板的完全匹配过滤技能"技能,即匹配skill_to_remove
的所有属性,那么为你的技能类实现一个相等的方法可能会更好(见this question)。然后,您可以在remove
上使用self.skills
方法。但是,这只会删除第一个匹配的实例。