Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何检查数组中是否存在类的属性?_Python_Arrays - Fatal编程技术网

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

Python 如何检查数组中是否存在类的属性?,python,arrays,Python,Arrays,我想知道是否可以检查一个类的数组是否有属性的特定实例,如果有,则返回True。换句话说,类属性的实例是否存在于该类的数组中 在我的示例中,我有一个classTeam数组。类Team有一个属性name。我想通过迭代团队实例数组来检查是否存在具有特定名称的团队实例 班级团队: class Team: def __init__(self): self.name = name # (String) [无效]这是我想要编写函数的方式: # team_name is a Stri

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

在我的示例中,我有一个class
Team
数组。类
Team
有一个属性
name
。我想通过迭代
团队
实例数组来检查是否存在具有特定
名称
团队
实例

班级团队:

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
我知道这不起作用,但是否可以以这种方式在数组中迭代相同的属性

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

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

我知道这是可行的,我只是想知道是否有其他方法可以做到这一点,类似于我上面提到的无效方法。

您可以做以下几点:

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
any(map(lambda obj: obj.name == '3', teams))
这将生成一个列表,列表中的项目都是团队名称。完成后,您可以在team\u names:中执行
if team\u name并获得所需的结果

另一方面,如果您只是想让它成为一个单行线,您可以这样做:

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

这将创建一个
列表
,然后检查列表的
len()
是否为1(或更大)如果是这种情况,则返回
True
else
False
以下类定义允许将用户的
name
分配给
团队。name
属性并强制它成为
str
对象:

class Team(object):
    def __init__(self, name):
        self.name = str(name)
以下是
团队
实例的示例列表:

teams = [Team(x) for x in range(10)]
你可以用一句话做我认为你想做的事:

使用另一个列表理解来确定
名称
中的任何一个是否等于
'3'

any([team.name == '3' for team in teams])
或者,如果您确实想使用某个函数,您可以使用以下命令:

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
any(map(lambda obj: obj.name == '3', teams))

您不能使用
团队。名称
作为
团队
不属于
团队
类别。所以,我想说你所做的是正确的/更充分的。是的,我理解这一点,我也理解为什么它不起作用,这更像是我所好奇的一般方法。