如何从float元素列表中找到max元素?

时间:2019-06-07 05:34:06

标签: python list for-loop

我在列表中存储了一个float元素列表。我想寻找当前最大的元素并进行进一步的操作。列表如下所示:

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

我尝试了以下链接的答案:Python : find max value and index of a list of list of list

但这没有帮助。

要查找最大的元素,请使用以下代码:

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:列表索引必须是整数或切片,而不是浮点数”

但是,当我尝试此操作时:

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

这成功给了我8.7。很明显,浮动不是问题。请帮助我弄清楚我在哪里做错了。

5 个答案:

答案 0 :(得分:3)

在原始代码中,您正在迭代子列表的元素,并将它们用作索引,因为子列表的元素是浮点数,因此当您将它们用作索引时,即执行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 :(得分:3)

如果您希望所有子列表的数字为max,请使用@Devesh的答案,但是您也可以使用:

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

max整个列表的总和:

print(max([x for i in tumor_size for x in i]))

答案 2 :(得分:1)

每个我在:

for i in tumor_size

是一个列表。

每个j在:

for j in i

是该列表中的浮动对象

所以当您使用表达式时:

tumor_size[j]

您将浮点j用作tumor_size列表的索引。

这就是导致您出错的原因。

答案 3 :(得分:1)

在每个列表中找到最大元素:

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

然后在上面的列表中找到max元素:

print max(max_elements)

答案 4 :(得分:0)

mx=[max(l) for l in list_name]
mx=max(mx)

您还可以找到max元素的索引:

for i in range(len(list_name)):
  if mx==ps[i]:
    print("The digit is "+str(i))
    break