我有以下列表:
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
从这里开始,我想不出一种方法可以将最旧的背部连接到它的线上,以便我可以打印它。有帮助吗?干杯!!
答案 0 :(得分:1)
您可以使用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号)是一个整数,但您正在使用字符串测试成员资格。您的年龄也被编码为字符串,这就是我的键函数将其转换为整数的原因。
答案 1 :(得分:0)
您可以(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
答案 2 :(得分:0)
您也可以使用一行
来完成此操作from itertools import ifilter
lst = ...
oldest = max(ifilter(lambda x: x[2] == 1, lst), key=lambda x: x[1])
答案 3 :(得分:0)
要将年龄“链接”回原始列表,我建议将年龄列表更改为字典:
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