Python 删除具有条件的列表中的元素

Python 删除具有条件的列表中的元素,python,list,conditional-statements,Python,List,Conditional Statements,我有一个名为Info的类,其中Info有一个字符串类型的实例变量,可以通过Info.getName() 我还有一个实例信息列表,比如class\u list=[Info('Aleck')、Info('John')] 给定一个name\u list=['Aleck',Bob'],我想删除class\u list中与name\u list中同名的元素,同时我还需要知道class\u list中是否没有一个名称(例如Bob)(例如打印出Bob不在列表中) 对于上面的例子,结果应该是class_list

我有一个名为Info的类,其中Info有一个字符串类型的实例变量,可以通过
Info.getName()

我还有一个实例信息列表,比如
class\u list=[Info('Aleck')、Info('John')]

给定一个
name\u list=['Aleck',Bob']
,我想删除class\u list中与name\u list中同名的元素,同时我还需要知道class\u list中是否没有一个名称(例如Bob)(例如打印出Bob不在列表中)

对于上面的例子,结果应该是class_list=[Info('John')],并打印出bob不在列表中

我知道这样做的丑陋方式,比如下面的代码(我并没有实际运行它,只是一个例子),有优雅的或python的方式来做到这一点吗

def removeElement(name_list, class_list):
    list_to_be_removed = []
    for name in name_list:
        is_name_in_list = false
        for obj in class_list
            if name == obj.getName():
                list_to_be_removed.add(obj)
                is_name_in_list = true
                break
        if is_name_in_list == false:
            print name + ' is not in the list'
        is_name_in_list = false

    for obj in list_to_be_removed:
        class_list.remove(obj)

列表理解是你的朋友

def remove_names(names_to_remove, info_list):
    return [info
            for info in info_list
            if info.getName() not in names_to_remove]

我更改了大多数变量的名称,以更接近我认为你的意思

没有类,只有类实例
Info('Alice')
是一个构造函数调用,用于创建Info类的实例

这个怎么样:

filtered = [info for info in info_list if info.get_name() not in name_list]
或者:

filtered = filter(lambda o: o not in name_list, info_list)
如果你有很多名字,把你的名字列表转换成一个集合并使用它

name_set = set(name_list)

我想你把类和实例混淆了。而且,
class
是一个关键字,所以很多代码都不会运行。很抱歉,我没有注意到我使用了保留词“class”,modified。我明白你的意思了,非常感谢。以你的方式,我可以得到过滤列表。然后我应该有另一个代码来获取name_列表中的名称,它不会删除info_列表中的任何内容。真的谢谢。