如何从列表中删除某些值的对象?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (87)

我有一个非常大的对象列表(你可以用Classes做的事情,是吗?)。我想浏览此列表并删除具有特定值的对象。然后我将使用排序列表来挑选随机元素并将其用于其他事情。

我应该使用字典或数组或其他东西而不是对象和列表吗?我对此非常陌生,如果它很简单或我做错了,我很抱歉。

例:

class Person:
    def __init__(self, name, gender, otherVar, otherVar2):
        self.name = name
        self.gender = gender
        self.otherVar = otherVar
        self.otherVar2 = otherVar2
        ## also more variables if that makes a difference

John = Person("John", boy, otherVar, otherVar2)
Jane = Person("Jane", girl, otherVar, otherVar2)   ## etcetera


myList = [John, Jane, Mary, Derek, Bob, Sue]
simpleThingThatIdoNotUnderstand():                 ## removes all the 
                                                   ## girls
myList = [John, Derek, Bob]

我知道我需要在列表中进行某种循环(虽然有很多方法,但我不确定哪一个会起作用),但是如何引用列表中对象的值?就像'如果性别=女孩,删除项目'

提问于
用户回答回答于

有几种方法可以做到这一点,有些方法比其他方法更快或更少。

最简单的方法是遍历整个列表,检查项是否符合某些条件,然后删除该项。特别是因为您正在为整个人群应用条件。

在您的示例中,这可能如下所示:

# removes all people of the specified gender
def removePeopleByGender(people, gender):
   output = []

   for person in people:
       # assumes person.gender and gender are the same data type
       if (person.gender != gender):
           output.append(person)

   return output

通常,字典是(键,值)配对的首选,在这些配对中,您将拥有一组键或特定键,并尝试进行查找。它们针对查找O(1)进行了大量优化,但使用了更多的内存。

用户回答回答于

这将是一个新的男孩名单:

boys = [person for person in myList if person.gender == boy]

最好创建一个新列表,而不是尝试从列表中删除对象。

扫码关注云+社区

领取腾讯云代金券