Python 如何在由类对象组成的列表中查找特定值的最大元素索引?
我想在每一行的嵌套列表中找到最大元素索引 我得到了这个错误:Python 如何在由类对象组成的列表中查找特定值的最大元素索引?,python,list,class,max,Python,List,Class,Max,我想在每一行的嵌套列表中找到最大元素索引 我得到了这个错误: maxe=array[i]。索引(max(数组[i]中的e_对象的e_object.x) ValueError:5不在列表中 我怎样才能得到这个结果 [3,2] 使用列表理解将嵌套的列表转换为x值之一,然后使用np.argmax: import numpy as np np.argmax([[element.x for element in row] for row in array], axis=1) 输出: array([
maxe=array[i]。索引(max(数组[i]中的e_对象的e_object.x)
ValueError:5不在列表中
我怎样才能得到这个结果
[3,2]
使用
列表
理解将嵌套的列表
转换为x
值之一,然后使用np.argmax
:
import numpy as np
np.argmax([[element.x for element in row] for row in array], axis=1)
输出:
array([3, 2], dtype=int64)
问题在于线路
maxe = array[i].index(max(e_object.x for e_object in array[i]))
您正在询问object.x
的索引,但该列表实际上包含object
。更改max
函数以查看对象x
属性内部
maxe = array[i].index(max(array[i], key=lambda o: o.x))
发生此错误的原因是
max
有效地对整数列表[0,2,-3,5]
进行操作,而索引
在e\u对象列表中搜索。有多种方法可以解决此问题
最简单的方法可能是让max
返回索引:
max_array = [max(range(len(a)), key=lambda x: a[x].x) for a in array]
这与使用numpy
的argmax
非常相似,但没有大量的导入和中间内存分配。请注意,此版本不需要对每个列表进行两次遍历,因为您不需要对max
的结果调用index
一个更长期的解决方案是将适当的比较方法添加到\uuuueq\uuuuu
和\uugt\uuuu
/\uu lt\uuuuu
对象中。没有任何循环,很好。如何像[3,2]那样表示结果?只需对结果调用.tolist()
。它说:“TypeError:”>“e_object”和“e_object”的实例之间不支持”,列表和数组在Python中的含义不同。你有的只是一张清单。
max_array = [max(range(len(a)), key=lambda x: a[x].x) for a in array]