我正在尝试使用以下代码来确定列表中元组中的第一项是否存在于分配列表中。
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)
,但无法弄清楚它是什么。
您不能只检查是否包含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
。
这里的问题与类无关。这是您正在尝试在元组列表中搜索字符串。
False
是self.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
了解更多。