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

Jaz*_*ine 5 python list max nested-lists python-3.x

我有一份清单清单

list_of_lists = [['a',1,19,5]['b',2,4,6],['c',22,5,9],['d',12,19,20]]
Run Code Online (Sandbox Code Playgroud)

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

[['c',22, 5,9],['d',12,19,20],['a',1,19,5]]
Run Code Online (Sandbox Code Playgroud)

或者,如果我循环,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))
Run Code Online (Sandbox Code Playgroud)

目前的输出是:

max of cases is:  22
max of cases is:  22
max of cases is:  22
Run Code Online (Sandbox Code Playgroud)

这个答案给出了最高的最大列表,但我希望能够灵活地返回顶部x而不是一个.

答案给出了单个列表中的前x个值.

ben*_*nvc 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]]
Run Code Online (Sandbox Code Playgroud)

您可以将其变成一个简单的函数来获取嵌套列表的顶部“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]
Run Code Online (Sandbox Code Playgroud)

  • 你好,benvc - 是前者,我尝试使用每个列表的所有三个 int 列中的最高值,并在列表列表中查找前三个列表,其中前 x 中至少有一个值,而不使用更多行比一次。这有帮助吗?我认为这就是您提供的,因为您的代码正确选择了包含 22 的列表,然后选择了包含 20 的列表,然后选择了包含 19 的列表,而没有再次考虑包含 19 和 20 的列表,因为它已被使用。这有助于澄清我正在寻找的东西吗? (2认同)