如何从数组中删除对象?

时间:2018-11-18 00:45:24

标签: python list object

如何通过查找对象的属性来删除对象?

我希望在将多个对象添加到列表时,可以通过属性代码进行搜索,例如,仅删除该对象

我该怎么办?

class Biblioteca():
    def cargarMateriales(self,material,a):
        material.append(a)
        return material
    def cargarPersonas(self):
        print()

class Material(Biblioteca):
    def __init__(self,tipoMaterial=None,codigo=None,autor=None,titulo=None,anio=None,status=None):
        self.tipoMaterial = tipoMaterial
        self.codigo = codigo
        self.autor = autor
        self.titulo = titulo
        self.anio = anio
        self.status = status
    def __repr__(self):
        return "Tipo de materia: {0}, Codigo: {1}, Autor del libro: {2}, Titulo del libro: {3}, Año del libro: {4}, status del libro: {5}".format(self.tipoMaterial,self.codigo,self.autor,self.titulo,self.anio,self.status)
    def altaMaterial(self):
        self.tipoMaterial = input(str("Cual es el tipo de material?"))
        self.codigo = input(str("Que codigo tiene el libro codigo?"))
        self.autor = input(str("Que autor tiene el libro?"))
        self.titulo = input(str("Que titulo tiene el libro?"))
        self.anio = int(input("De que año es?"))
        self.status = input(str("Que status tiene?"))

material = []
b = Biblioteca()
a = Material()
a.altaMaterial()
b.cargarMateriales(material, a)

2 个答案:

答案 0 :(得分:0)

要查找与列表中的条件匹配的元素,可以使用以下单行表达式:

elements = [element for element in my_list if element.code == code]

code是包含您要搜索的代码的变量。这将返回所有匹配的元素,如果没有匹配项,则可能为空列表;如果只有一个匹配条件的元素或多个元素,则返回一个元素的列表。如果只需要第一个符合条件的元素,则可以使用next函数,如下所示:

element = next(element for element in my_list if element.code == code)

一旦有了元素,就可以像这样从列表中将其删除:

my_list.remove(element)

答案 1 :(得分:0)

过滤器功能允许您从列表中选择某些元素:

for i in range(15):
    materiales.append(Material(tipoMaterial=i%4, codigo=i))

print(materiales)

materiales = list(filter(lambda material: material.tipoMaterial < 2, materiales))

print(materiales)

因此,您可以匹配指定某些条件的条件。