有没有一种方法可以遍历元组列表并在删除元组时更新范围?

2024-07-03 06:49:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在尝试编写代码,用于遍历元组列表,如果名称匹配,则检查谁年龄较大,并从列表中删除较年轻的元组。我遇到了这样一个问题:如果我删除一个元组,即使我更新了变量l,代码仍然会尝试遍历原始范围。 代码:

dads = [('Jim', '30'), ('Jeff', '45'), ('Jim', '35')]
l = len(dads)
for i in range(l):
    for j in range(l):
        if dads[i][0] == dads[j][0]:
            if int(dads[i][1]) > int(dads[j][1]):
                dads.pop(j)
                l = len(dads)
                if j < i:
                    j -= 1
                    i -= 1
print(dads)

Tags: 代码in名称列表forlenifrange
3条回答

你需要更新你的循环

 for j in range(i):

最后,这里是代码

dads = [('Jim', '30'), ('Jeff', '45'), ('Jim', '35')]
l = len(dads)
for i in range(l):
     j in range(i):
        if dads[i][0] == dads[j][0]:
            if int(dads[i][1]) > int(dads[j][1]):
                dads.pop(j)
                l = len(dads)
                if j < i:
                    j -= 1
                    i -= 1
print(dads)

您可以使用while循环。大概是这样的:

oldest_dad = ('nobody', '0')
dads = [('Jim', '30'), ('Jeff', '45'), ('Jim', '35')]
while 0 < len(dads):
    if int(oldest_dad[1]) < int(dads[0][1]):
        oldest_dad = dads[0]
    dads.pop(0)

要使其成为一行:

new_dads=[y for y in dads if int(y[1])!=min([int(x[1]) for x in dads])]

相关问题 更多 >