【问题标题】:How do you loop through a list of objects and get a specific attribute?如何遍历对象列表并获取特定属性?
【发布时间】:2021-08-22 22:42:06
【问题描述】:

我有这段代码,但每当我运行它时,我只得到 9。我对 python 很陌生,所以我不能 100% 确定 .weight 部分是否正确,但如果是,那么我不知道是什么是错的。患者参数为:姓名、身份证、出生日期、身高、体重

from func import Patient

p1 = Patient("John", 131, "03/09/03", 5.2, 155)
p2 = Patient("Josh", 151, "05/18/05", 5.8, 195)
p3 = Patient("Jacob", 179, "12/14/09", 6.5, 105)

patientList = [p1, p2, p3]

def getWeight(weight):
  for i in range(len(patientList)):
    if weight == patientList[i].weight:
        return patientList[i]
    else:
        return 9

print(getWeight(105))

【问题讨论】:

  • 为什么需要循环索引?循环数组
  • 发布 Patient 类定义,因为 getWeight 看起来应该可以工作
  • @flaxon 我试过了。每当我这样做时,我都会得到:“TypeError:列表索引必须是整数或切片,而不是患者”
  • @BatWannaBe 患者类非常简单: class Patient: def __init__(self, name, idNumber, DOB, height, weight): self.name = name, self.idNumber = idNumber, self .DOB = DOB,self.height = 身高,self.weight = 体重
  • 你没有传入函数 patientList

标签: python for-loop object


【解决方案1】:

你返回太早,你应该先循环整个数组,如果没有找到则返回 9。如果你发现你马上回来。

你可能想要这个

def getWeight(weight):
    for p in patientList:
        if weight == p.weight:
            return p
        
    return 9

以上将返回找到的第一个具有该体重的患者。 但我认为您会希望返回列表中所有患者实例的列表

def getWeight(weight):
    return [p for p in patientList if weight == p.weight]

【讨论】:

  • 我不确定这是我的 IDE 中的问题还是什么,但这也为我返回 9??//// 编辑此返回 而不是 9。我可以让它返回一个数字吗?
  • 它是基于你的代码..你想返回什么数据?
  • 这是你的类的实例
  • 如果你想要这个名字,例如使用return p.name(不确定你如何命名你的参数,因为我没有看到你的类)
  • 我很确定这是正确的,但这就像我认为的 str 值。如果我输入 return int(p) 它会给我一个类型错误。我只是想获得返回的 int 版本。例如:打印(getWeight(105))
【解决方案2】:
class Patient:
    def __init__(self, name, idNumber, DOB, height, weight):
        self.name = name
        self.idNumber = idNumber
        self.DOB = DOB
        self.height = height
        self.weight = weight
    
p1 = Patient("John", 131, "03/09/03", 5.2, 155)
p2 = Patient("Josh", 151, "05/18/05", 5.8, 195)
p3 = Patient("Jacob", 179, "12/14/09", 6.5, 105)

patientList = [p1, p2, p3]

def getWeight(weight):
    outlist=[]
    for i in range(len(patientList)):
        if weight == patientList[i].weight:
            outlist.append(patientList[i].name)
            outlist.append(patientList[i].idNumber)
            outlist.append(patientList[i].DOB)
            outlist.append(patientList[i].height)
            outlist.append(patientList[i].weight)
            return outlist
    return 9

print(getWeight(105))

#['Jacob', 179, '12/14/09', 6.5, 105]  

同样在未来,您可能想考虑使用 pandas 解决问题,如下所示:

import pandas

mydata = pandas.DataFrame([['John', 131, '03/09/03', 5.2, 155]
        ,['Josh', 151, '05/18/05', 5.8, 195]
        ,['Jacob', 179, '12/14/09', 6.5, 105]
],columns=['name', 'idNumber', 'DOB', 'height', 'weight'])

def getWeight(weight):
    return mydata.loc[mydata['weight'] == weight]

print(getWeight(105))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    相关资源
    最近更新 更多