Как я могу удалить объект из массива? - PullRequest
0 голосов
/ 18 ноября 2018

Как я могу удалить объект, ища свойство / атрибут объекта?

Я хочу, чтобы при добавлении нескольких объектов в список я мог искать, например, по коду атрибута и удалять только этот объект

Как я мог это сделать?

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 голосов
/ 18 ноября 2018

Функция filter позволяет вам выбирать определенные элементы из списка:

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)

Следовательно, вы можете сопоставить те, которые задают некоторые критерии.

0 голосов
/ 18 ноября 2018

Для поиска элементов, соответствующих критериям в списке, вы можете использовать это однострочное выражение:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...