Python: 通过属性值从列表中删除对象

12 浏览
0 Comments

Python: 通过属性值从列表中删除对象

现在我想要从myList中移除所有att2等于1的对象。

0
0 Comments

Python: 通过属性值从列表中删除对象

在解决这个问题之前,我们先来了解一下问题的原因。这是一个关于从列表中删除具有特定属性值的对象的问题。假设我们有一个包含多个实例的列表,每个实例都有不同的属性值。现在我们想要从列表中删除具有特定属性值的对象。

那么,我们该如何解决这个问题呢?通常情况下,我们可能会尝试直接从列表中删除对象。但是,有一种更好的方法是构建一个新列表,该列表不包含我们不想要的对象。下面是一个示例代码:

class MyClass():
    def __init__(self, name, att1, att2):
        self._name = name
        self._att1 = att1
        self._att2 = att2
    def __repr__(self):
        return f'{self._name=}, {self._att1=}, {self._att2=}'
myList = [MyClass("p1", 1, 1), MyClass("p2", 0, 0), MyClass("p3", 0, 1)]
myList = [c for c in myList if c._att2 != 1]
print(myList)

输出结果为:

[self._name='p2', self._att1=0, self._att2=0]

这里使用了列表推导(list comprehension)的方式,根据属性值的条件来构建了一个新的列表。通过这种方法,我们可以轻松地从列表中删除具有特定属性值的对象。

在代码示例中,我们定义了一个名为`MyClass`的类,它具有三个属性:`name`、`att1`和`att2`。然后,我们创建了一个包含了三个`MyClass`实例的列表`myList`。接下来,我们使用列表推导的方式,通过判断`_att2`属性的值是否为1来构建了一个新的列表,并将其赋值给了`myList`变量。最后,我们打印输出了新的列表。

需要注意的是,在代码示例中,我们还定义了一个`__repr__`方法,用于打印对象的属性值。这是一个额外的实现,可能会对初学者来说有些困惑。但是,根据个人习惯,为类添加`__repr__`方法是一个好的做法。

总结起来,通过构建一个新的列表,我们可以轻松地从原始列表中删除具有特定属性值的对象。这种方法简单而高效,可以帮助我们更好地处理列表中的对象。

0