试图查找字符串是否在对象列表中

时间:2017-12-14 12:35:16

标签: python

我不确定这是否可能因为在线查找和回答有困难,可能因为我不知道必须解决问题。所以下面的代码是我想要做的基本例子。

class Names():
    def __init__(self, name):
        self.name = name
    def __repr__(self):
        return self.name

>>> i = []
>>> i.append(Names("bob"))
>>> i.append(Names("jill"))
>>> i
[bob, jill]
>>> "bob" in i
False

我有一个Name类的列表,如果名称已存在,则返回True。如果知道如何让这个工作?

3 个答案:

答案 0 :(得分:9)

有几种方法可以做到这一点。

最简单的方法是使用any

进行迭代
any(item.name == 'bob' for item in i)

更复杂的版本是在您的班级上定义__eq__方法:

def __eq__(self, val):
    return self.name == val

现在您的原始"bob" in i代码将有效。

(对于实际代码,如果您在名称的两个实例之间,而不是字符串,则可能需要检查该方法。)

答案 1 :(得分:2)

您可以遍历列表并根据字符串检查每个对象的{articles created_by="user:id"}...{/articles} 属性。

.name

答案 2 :(得分:1)

指出更多细节。

当你问

"bob" in i

你问的是字符串"bob"是否在列表中。 即使你问是否

Names("bob") in i

你得到假,因为列表中没有确切的对象。

如果您想使用相同的__eq__来对待Names,则可以在课程中添加name方法:

class Names():
    def __init__(self, name):
        self.name = name
    def __repr__(self):
        return self.name
    def __eq__(self, other):
        return self.name == other.name