我在列表中存储了一个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。很明显,浮动不是问题。请帮助我弄清楚我在哪里做错了。
答案 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