[英]Checking index through a list of indexes
我有以下清单:
lst = [['dad','50',1],['brother','20',1],['mom','30',1],['sister','10',1],['dad','50',2],['brother','20',2],['mom','30',2],['sister','10',2]]
我试图选择一个家庭(用1或2表示),然后将年龄与该家庭成员的年龄进行比较,以找出最高的家庭。 我能够区分这些家庭并找到最老的家庭,但是我无法显示该家庭成员的角色,因为在此过程中,他的年龄不再与他的名字相关联。 下面,如果家庭是第一个,则该程序应检查并比较他们的年龄,并打印出他在家庭中的角色。
age =[]
for i in range(len(lst)):
if lst[i][2] == "1": # checking thats its family 1
age.append(int(lst[i][1])) # creates lists of all ages in fam 1
m = max(age)
m = str(m) # finds the oldest
从这里开始,我想不出一种方法来将最早的链接回它的行,以便我可以打印它。 有什么帮助吗? 干杯!!
您可以将按键功能与max
people =[]
for i in range(len(lst)):
if lst[i][2] == "1": # checking thats its family 1
people.append(lst[i])
eldest = max(people, key=lambda x: int(x[1]))
eldest
包含代表您数据结构中某个人的值的完整列表。
还值得注意的是,您的数据和代码可能不一致。 例如,第二个索引(家庭ID号)是一个整数,但是您正在测试字符串的成员资格。 您的年龄也被编码为字符串,这就是为什么我的键函数将其强制转换为整数。
您可以(A)存储带有年龄的姓名,然后在需要时随身携带,或者(B)返回并找到具有所需年龄的人。 这是(B)的示例:
# your for loop
for ...
# outside of your for loop, not inside as your code has it
max_age = max(age)
for person in lst:
if person[2] == 1 and int(person[1]) == max_age:
name_of_oldest_person_in_family_1 = person[0]
break
您也可以使用一行来完成此操作
from itertools import ifilter
lst = ...
oldest = max(ifilter(lambda x: x[2] == 1, lst), key=lambda x: x[1])
要将年龄“链接”回原始列表,我建议将年龄列表更改为字典:
age = {}
在该词典中,您可以将年龄作为关键字存储,并将其来自列表作为列表存储。 例如,第一个父亲是50岁,当将此数据附加到年龄字典后,它将显示为
{50 : last[0]}
使用这样的字典,可以轻松访问原始列表。
class Family1(): def __init__(self,name,age): self.name = name self.age = age class Family2(Family1): def __init__(self,name,age): Family1.__init__() dad1 = Family1("Dad",50) # etcetera
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.