访问类别列表中的项目

问题描述 投票:0回答:2

我正在尝试使用以下代码来确定列表中元组中的第一项是否存在于分配列表中。

class Students:
    id = int()
    full_name = ""
    assignments = [("Assign_1", 4), ("Assign_2", 10)]

    def __init__(self, id, full_name):
        self.id = int(id)
        self.full_name = full_name

    def get_name(self):
        print(self.full_name)
    def get_assignments(self):
        print(self.assignments)
    def get_assignment(self, name):
        if name in self.assignments:
            return name
        else:
            return None

Becky = Students(123, "Becky S")
Becky.get_assignments()
print(Becky.get_assignment("Assign_1"))

为了说明这个概念,我提供了不必要的代码。当我使用get_assignments()方法返回所有分配时,我可以这样做,但是当我使用get_assignment打印单个分配的名称时,我会一直返回None,就好像分配没有不存在。我认为问题在于我如何定义get_assignment(self, name),但无法弄清楚它是什么。

python class methods class-method
2个回答
1
投票

您不能只检查是否包含in,因为该字符串不是列表的元素—列表中有元组。您检查分配的any是否具有等于any的第一个成员,例如:

name

这将查找分配,并将def get_assignment(self, name): if any(assignment[0] == name for assignment in self.assignments): return name else: return None 与每个元素的第0个元素进行比较,如果找到则返回name,否则返回True


0
投票

这里的问题与类无关。这是您正在尝试在元组列表中搜索字符串。

Falseself.assignments。也就是说,列表中的每个元素都是(name,id)的元组。当您执行[("Assign_1", 4), ("Assign_2", 10)]时,Python会将参数与列表中的每个元素进行比较。但是in永远不会等于"Assign_1"

相反,您需要遍历列表并检查名称是否在任何元素中:

("Assign_1", 4)

也请注意,您对Python类的理解存在一些问题。您不想在课程级别定义if any(assignment[0] == name for assignment in self.assignments) id。阅读name了解更多。

© www.soinside.com 2019 - 2024. All rights reserved.