比较元组列表中元组的项目

时间:2018-03-09 21:36:32

标签: python math lambda tuples list-comprehension

我已经设计了一个程序来计算列表中的一些最大元组,但是我被困在了必须比较元组中的最大item[1]并将其与另一个元组item[1]进行比较的位置。 。 这是元组列表:

fff = []
anslist = [(2, [1]), (3, [7]), (4, [2]), (5, [5]), (6, [8]), (7, [16]), (8, [3]), (9, [19]), (10, [6]), (11, [14]), (12, [9]), (13, [9]), (14, [17]), (15, [17]), (16, [4]), (17, [12]), (18, [20]), (19, [20]), (20, [7])]

这是我的代码:

print(max(anslist, key=lambda x: x[1]))
fff.append(max(anslist, key=lambda x: x[1]))
anslist.remove(max(anslist, key=lambda x: x[1]))
while (max(fff[1], key=lambda x: x[1])) == (max(anslist[1], key=lambda x: x[1])):
     print(max(anslist, key=lambda x: x[1]))
     anslist.remove(max(anslist, key=lambda x: x[1]))

我希望我的程序能够打印(18,[20])和(19,[20]),并且由于元组列表总是随着用户输入的变化而变化我需要某种循环才需要经过所有元组,直到元组的第二项不再是最大的。

这是我得到的错误:

while (max(fff[1], key=lambda x: x[1])) == (max(anslist[1], key=lambda x: x[1])):
IndexError: list index out of range

1 个答案:

答案 0 :(得分:0)

问题在于您的下标[1]处于错误的位置。

而不是:

while (max(fff[1], key=lambda x: x[1])) == (max(anslist[1], key=lambda x: x[1])):

这就是你想要的:

while max(fff, key=lambda x: x[1])[1] == max(anslist, key=lambda x: x[1])[1]:

按预期打印(19, [20])

(我还从你的表达中删除了所有不需要的parens。)

更有效的方法是只查找一次max并根据该列表过滤列表:

max_element = max(x[1] for x in anslist)
max_tuples = [x for x in anslist if x[1] == max_element]

同样有趣的是排序anslist以将(18, [20])(19, [20])放在前面,之后你可以使用一个简单的for循环并在元组的第二个元素发生变化时中断。

sorted_anslist = sorted(anslist, key=lambda x: x[1], reverse=True)