如果该对象的列表为空,如何从列表中删除对象? (Python3)

时间:2017-12-25 00:40:44

标签: python python-3.x list object

在python中工作3.假设我已经为一个对象My_Object创建了一个类。 My_Object有一个变量,它是一个数字列表。它还有一个功能,允许您从对象中的列表中删除数字。

现在我创建一个包含多个My_Objects的列表,其中一些列表已清空,另一些列表中仍有一些数字。我如何从my_list中删除其对象在列表中没有值的任何对象?

所以在下面的例子中,我想从my_list中删除x,因为x有一个空列表,同时在my_list中保留y和z,以便打印my_list会产生 - [2,3] [1,2,3]而不是[] [2,3] [1,2,3]

试图自己搞清楚,但似乎无法弄清楚如何根据内容从列表中完全删除对象。

class My_Object:

    def __init__(self):
        self.a = [1, 2, 3]

    def __str__(self):
        return '{}'.format(self.a)

    def remove_item(self, item):
        self.a.remove(item)

x = My_Object()
y = My_Object()
z = My_Object()

my_list = [x, y, z]

x.remove_item(1)
x.remove_item(2)
x.remove_item(3)

y.remove_item(1)

print(*my_list)

4 个答案:

答案 0 :(得分:1)

在发布后不久就想出来了。这似乎让我得到了我想要的东西:

my_list = [x for x in my_list if x.a != []]

答案 1 :(得分:0)

要删除代码中包含空列表的任何对象,这是一个简单的算法

  • 首先遍历列表中的每个对象
  • 检查对象的列表长度== 0,表示空
  • 如果是这样删除它别的什么都不做

这里有一个简单的代码

# go through each element 
for obj in my_list : 
    # check if its list empty 
    if len(obj.a) == 0 :
       # if true remove it 
       my_list.remove(obj)
print(my_list)

答案 2 :(得分:-1)

使用list comps

my_list = [x for x in my_list if x]

或变得愚蠢

my_list = [*filter(bool, my_list)]

答案 3 :(得分:-1)

您可以按列表的值或列表中的索引从列表中删除项目。下面是我演示的代码,即从列表中删除项目的值及其索引

class My_Object:

    def __init__(self):
        self.a = [1, 2, 3]

    def __str__(self):
        return '{}'.format(self.a)

    def remove_item(self, item):
        self.a.remove(item)

x = My_Object()
y = My_Object()
z = My_Object()

my_list = [x, y, z]

# If you want to remove object from list by its value than
my_list.remove(y)  # This will remove y object from my_list

# Now my_list has two elements in it which are [x, z]
# If you want to remove object from list by its value than
my_list.pop(0)  # This will remove x object from my_list

# Now my_list has one element in it which is[z]

如果您不知道对象的值,则无法通过其值删除它,因此您可以执行的操作是您可以遍历列表并搜索对象的特定属性,如果匹配该属性而不是简单地通过pop()

从列表中删除该对象