Как найти списки с максимальными значениями в списке списков (где вложенные списки содержат строки и числа)? - PullRequest
0 голосов
/ 24 октября 2018

У меня есть список списков

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

, и я хотел бы получить топ-х списков с самыми высокими значениями, чтобы top 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

Этот ответ дает список верхнего максимума, но я хотел бы иметь гибкость, чтобы возвратить верхний x, а не один.

Этот ответ дает максимальные значения x max в одном списке.

1 Ответ

0 голосов
/ 24 октября 2018

Если ваши вложенные списки всегда имеют только одну строку в первом индексе (как в вашем примере), то вы сортируете свой список списков по максимальному значению, используя 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...