Как найти элемент max из списка элементов списка с плавающей точкой? - PullRequest
0 голосов
/ 07 июня 2019

У меня есть список элементов с плавающей точкой, хранящихся в списке.Я хочу найти самый большой элемент и сделать дальнейшие операции.Список выглядит так:

tumor_size = [[2.6,3.65],[],[2.0,2.9,1.7,2.5,1.3]]

Я попробовал ответы по этой ссылке: Python: найти максимальное значение и индекс списка списка списка

Но этоне помогло.

Чтобы найти самый большой элемент, я использую этот код:

T_stage_list=[]
T_stage = "T2b"
for i in tumor_size:
   for j in i:
   maxlen = max(tumor_size[j])
     if (maxlen>2.0 & maxlen<3.0):
     T_stage = "T2a"
T_stage_list.append(T_stage)

Это дает мне сообщение об ошибке "TypeError: списочные индексы должны быть целыми или кусочками, а не float"

Однако, когда я пытаюсь это сделать:

ltd =[8.7,5.7]
ltdmax = max(ltd)

В результате я получаю 8,7 успешно.Очевидно, что проблема не в поплавке.Пожалуйста, помогите мне понять, где я делаю неправильно.

Ответы [ 4 ]

3 голосов
/ 07 июня 2019

Используйте ответ @ Devesh, если вы хотите max imum для всех подсписков, но вы также можете использовать:

print(list(map(max, filter(None, tumor_size))))

max imum всего списка:

print(max([x for i in tumor_size for x in i]))
3 голосов
/ 07 июня 2019

В исходном коде вы перебираете элементы подсписка и используете их в качестве индексов, поскольку элемент подсписка является плавающей точкой, когда вы используете их в качестве индекса, т.е. вы делаете tumor_size[2.6], следовательно, вы получаете ошибку TypeError: list indices must be integers or slices, not float

Также должно быть and вместо &, чтобы связать условные выражения вместе

Чтобы это исправить, вам нужно перебрать подсписки каждого списка и вычислить максимум, учитывая, что список непустой

tumor_size = [[2.6,3.65],[],[2.0,2.9,1.7,2.5,1.3]]

#Find max of each sublist given sublist is non-empty
res = [max(li) for li in tumor_size if li]

print(res)

Выход будет

[3.65, 2.9]

Или, если мы перейдем к вашему первоначальному подходу, вы можете избавиться от внутреннего цикла, проверить наличие maxlen только в том случае, если подсписок не пустой, и выполнить сравнение

tumor_size = [[2.6,3.65],[],[2.0,2.9,1.7,2.5,1.3]]


T_stage_list=[]

for i in tumor_size:

    #Default value is T0
    T_stage = "T0"
    #If sublist is non-empty
    if i:
        #Get max and perform comparison
        maxlen = max(i)
        if (maxlen>2.0 and maxlen<3.0):
            T_stage = "T2a"
        else:
            T_stage = "T2b"
    #Add T_stage
    T_stage_list.append(T_stage)

print(T_stage_list)

Вывод будет

['T2b', 'T0', 'T2a']
1 голос
/ 07 июня 2019

найдите элементы max в каждом списке:

max_elements = [max(l) for l in tumor_size if len(l)>0]

, затем найдите элемент max в приведенном выше списке:

print max(max_elements)
1 голос
/ 07 июня 2019

Каждый i в:

for i in tumor_size

является списком.

Каждый j в:

for j in i

является плавающей точкой в ​​этом списке

поэтому, когда вы используете выражение:

tumor_size[j]

, вы используете число с плавающей запятой j в качестве индекса в списке tumor_size.

Вот что вызывает вашу ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...