首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从列表中删除具有特定值的对象?

如何从列表中删除具有特定值的对象?
EN

Stack Overflow用户
提问于 2018-10-23 07:34:48
回答 3查看 60关注 0票数 0

我有一个非常大的对象列表(你可以用类做的东西,对吧?)我想要遍历这个列表,如果对象具有特定值,则将其删除。然后,我将使用排序列表来挑选随机元素,并将它们用于其他用途。

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

示例:

代码语言:javascript
复制
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]

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-10-23 07:44:54

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

最简单的方法是遍历整个列表,检查该项目是否与某些条件匹配,然后删除该项目。尤其是因为您将一个条件应用于您的整个人员集合。

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

代码语言:javascript
复制
# 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)进行了大量优化,但使用了更多的内存。

票数 1
EN

Stack Overflow用户

发布于 2018-10-23 07:45:09

这将生成一个新的男孩列表:

代码语言:javascript
复制
boys = [person for person in myList if person.gender == boy]

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

票数 0
EN

Stack Overflow用户

发布于 2018-10-23 07:47:09

单独使用经典的for item in list:循环并不能达到这个目的,因为您不能从该循环中的列表中删除元素。

首先,a会说你定义了一个函数,它接受一个人,如果它应该留在列表中,则返回true,如果应该删除,则返回false。假设您将该函数命名为keep_person。在此之后,您可以使用以下方法之一:

使用过滤功能(推荐):

代码语言:javascript
复制
myList = filter(keep_person, myList)

或者这样,如果您更喜欢好的旧循环:

代码语言:javascript
复制
people_to_remove = []
for person in myList:
    if not keep_person(person):
        people_to_remove.append(person)

for person in people_to_remove:
    myList.remove(person)

当然,还有很多其他的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52939070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档