如何检查数组中是否存在类的属性?

时间:2019-01-04 16:59:26

标签: python arrays

我想知道是否可以检查类的数组是否具有属性的特定实例,如果可以,则返回True。换句话说,该类的数组中是否存在类属性的实例?

在我的示例中,我有一个类Team的数组。类Team的属性为name。我想通过迭代Team实例数组来检查是否存在具有特定name的{​​{1}}实例。

班级团队:

Team

[无效]这是我想要编写函数的方式:

class Team:
    def __init__(self):
        self.name = name  # (String)

我知道这行不通,但是有可能以这种方式遍历数组中的相同属性吗?

[有效]关于我的代码目标,我有以下可以正常运行的代码:

# team_name is a String variable
# teams is an array of the Team class

def team_name_taken(team_name, teams):
    if team_name in teams.name:
        return True
    else:
        return False

我知道这行得通,我只是想知道是否还有另一种方法,类似于我上面所表示的无效方法。

2 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

def team_name_taken(team_name, teams):
    team_names = [team.name for team in teams]
    if team_name in team_names:
        return True
    else:
        return False

这将生成一个列表,该列表中的项目为所有团队名称。完成后,您可以if team_name in team_names:并获得所需的结果。

另一方面,如果您只想使其成为一体,则可以执行以下操作:

def team_name_taken(team_name, teams):
    return len([ team for team in teams if team.name == team_name ]) >= 1

这将产生一个list,然后检查列表中的len()是否为1(或更大),如果是,则返回True,否则返回False。 / p>

答案 1 :(得分:0)

以下类定义允许将来自用户的name分配给Team.name属性,并强制其成为str对象:

class Team(object):
    def __init__(self, name):
        self.name = str(name)

以下是Team个实例的示例列表:

teams = [Team(x) for x in range(10)]

您可以使用一些单线来完成我想做的事情:

使用另一个列表推导来找出name中的任何一个是否等于'3'

any([team.name == '3' for team in teams])

或者,如果您确实要使用功能,则可以使用以下内容:

any(map(lambda obj: obj.name == '3', teams))