如何在列表列表(嵌套列表包含字符串和数字)中找到具有最大值的列表?

时间:2018-10-23 23:10:11

标签: python python-3.x list max nested-lists

我有一个列表列表

list_of_lists = [['a',1,19,5]['b',2,4,6],['c',22,5,9],['d',12,19,20]]

,我想获得最高x值最高的列表,因此 前3个max(list_of_lists)将返回

[['c',22, 5,9],['d',12,19,20],['a',1,19,5]]

或者如果我遍历list_of_lists,我可以根据所选列表的索引将具有最高x max值的每个列表追加到另一个列表中。

这是我正在使用的代码,但是它有缺陷,因为我认为我需要在每个循环的末尾删除选定的答案,因此它不会出现在下一个循环中,而只会显示在第4列(x [ 3])

for y in case_list:
    last_indices = [x[3] for x in case_list]
    print("max of cases is: ",max(last_indices))

当前的输出是:

max of cases is:  22
max of cases is:  22
max of cases is:  22

answer给出了最大的最大列表,但我想灵活地返回前x个而不是一个。

answer在单个列表中给出前x个最大值。

1 个答案:

答案 0 :(得分:4)

如果嵌套列表的第一个索引始终只有一个字符串(如您的示例),那么您可以对每个嵌套列表的一个切片(不包括第一个项目)使用最大值max()对列表列表进行最大值排序。然后,仅根据所需的“顶部”结果数对最终输出进行切片。以下是获取具有最大值的“前3个”列表的示例。

list_of_lists = [['a',1,19,5],['b',2,4,6],['c',22,5,9],['d',12,19,20]]

# sort nested lists descending based on max value contained
sorted_list = sorted(list_of_lists, key=lambda x: max(x[1:]), reverse=True)

# slice first 3 lists (to get the "top" 3 max values)
sliced_list = sorted_list[:3]

print(sliced_list)  
# OUTPUT
# [['c', 22, 5, 9], ['d', 12, 19, 20], ['a', 1, 19, 5]]

您可以将其变成一个简单的函数,以获取嵌套列表的前“ x”个(该函数后的循环纯粹是为了打印与您的示例类似的东西)。

def max_lists(data, num):
    results = sorted(data, key=lambda x: max(x[1:]), reverse=True)
    return results[:num]

list_of_lists = [['a',1,19,5],['b',2,4,6],['c',22,5,9],['d',12,19,20]]

top_three = max_lists(list_of_lists, 3)

print(top_three)                     
for x in top_three:
    print(f'max value: {max(x[1:])} list: {x}')

# OUTPUT
# [['c', 22, 5, 9], ['d', 12, 19, 20], ['a', 1, 19, 5]]
# max value: 22 list: ['c', 22, 5, 9]
# max value: 20 list: ['d', 12, 19, 20]
# max value: 19 list: ['a', 1, 19, 5]