Python найти максимум в списке списков и элементов с неопределенным числом целых чисел и чисел с плавающей точкой - PullRequest
0 голосов
/ 30 января 2020

У меня большой список списка. Я пытаюсь найти в нем максимум и минимум. Предыдущие вопросы об этом состоят из списков со строками, и этот вопрос отличается. T

    big_list = [[137.83,81.80,198.56],0.0,[200.37,151.55,165.26, 211.84],
 0.0,[1,2,3],4,[5,6,0,5,7,8],0,[2,1,4,5],[9,1,-2]]

Мой код:

max =  max(list(map(max,boxs_list)))

Текущий вывод:

TypeError: 'numpy.float64' object is not iterable

Ответы [ 2 ]

2 голосов
/ 30 января 2020

Вы можете сделать следующее, используя max() и min() с выражениями генератора, и проверить с помощью isinstance(), чтобы увидеть, является ли каждый элемент списком.

>>> min(sl if not isinstance(sl, list) else min(sl) for sl in big_list)
-2
>>> max(sl if not isinstance(sl, list) else max(sl) for sl in big_list)
9
1 голос
/ 30 января 2020

проблема в том, что вам нужен список, содержащий только списки

np.max(np.concatenate([l if isinstance(l,list) else [l] for l in big_list]))

или

max(map(max,[l if isinstance(l,list) else [l] for l in big_list]))

Вывод

9

РЕДАКТИРОВАТЬ: получить длина подсписка

lens = [len(l) if isinstance(l,list) else 1 for l in big_list]
#[3, 1, 4, 1, 3, 1, 6, 1, 4, 3]

, если вы хотите рассмотреть только список:

#lens = [len(l) if isinstance(l,list) else None for l in big_list]
#[3, None, 4, None, 3, None, 6, None, 4, 3]

Мы могли бы сделать так, как мы получили максимум:

list(map(len,[l if isinstance(l,list) else [l] for l in big_list]))
#[3, 1, 4, 1, 3, 1, 6, 1, 4, 3]

Я думаю, что лучший способ это:

list(map(lambda x: len(x) if isinstance(x,list) else None ,big_list))
#[3, None, 4, None, 3, None, 6, None, 4, 3]
...