我想知道是否可以检查类的数组是否具有属性的特定实例,如果可以,则返回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
我知道这行得通,我只是想知道是否还有另一种方法,类似于我上面所表示的无效方法。
答案 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))