从列表中查找最高元素的索引

时间:2018-11-15 06:19:58

标签: python-3.x list

这是我要处理的列表。 值:

[[0.25, 0.0, 0.0, 0.0, 0.0, 0.0, 0.94, 0.0, 0.0, 0.63, 0.0],
     [0.51, 0.51],
     [0.54, 0.54, 0.0, 0.0,0.63,  0.0, 0.51, 0.54, 0.51, 1.0, 0.51],
     [0.81,0.05, 0.13, 0.7, 0.02]]

我试图找到属于哪个列表的最高值。此处的最高值为1,其在第三列表中。即索引2。 如何获得?

maxval=[]
maxval1=[]
for i in range(0,len(Value)):
        maxval1.append(max(Value[i]))
maxval.append(max(maxval1))


maxval1
Out[220]: [0.94, 0.51, 1.0, 0.81]

maxval
Out[221]: [1.0]

index=[]
index1=[]
for i in range(0,len(Value)):
        index1.append(Value[i].index(maxval))

给出错误:ValueError: [1.0] is not in list

3 个答案:

答案 0 :(得分:4)

您要在每个列表中搜索最大值,但是最大值仅出现在第三列表中,除非第一列表本身中存在最大值,否则所有其他列表都将抛出ValueError

可以像这样简单地完成

max_list = list()
for i, sub_list in enumerate(Value):
    max_list.append((max(sub_list), i))

index_of_max = max(max_list)[1]

index_of_max提供包含最大值的列表的索引。

答案 1 :(得分:1)

您也可以单线执行此操作:

data = [[0.25, 0.0, 0.0, 0.0, 0.0, 0.0, 0.94, 0.0, 0.0, 0.63, 0.0],
        [0.51, 0.51],
        [0.54, 0.54, 0.0, 0.0,0.63,  0.0, 0.51, 0.54, 0.51, 1.0, 0.51],
        [0.81,0.05, 0.13, 0.7, 0.02]]

# iL === innerList, abbreviated for 79 chars line width
max_idx, max_value = max( enumerate(max(iL) for iL in data), key = lambda x:x[1])

print(max_idx)

输出:

2  # max_value == 1, but not printed

诀窍是获取每个内部列表的max(..)enumerate(),并使用另一个max(iterable, key=...)来选择最高值(而不是排名)的key枚举元组(position,value)中的一个。

优势-使用生成器

您没有创建任何中间列表,但仅与生成器一起工作-对于大列表,这比创建infiQuanta这样的列表对内存更友好。

答案 2 :(得分:0)

您可以使用Python的库pandas解决此问题。解决方案变得非常简单:

从您的列表中创建一个dataframe(df):

In [2040]: df = pd.DataFrame(Value)

In [2041]: df
Out[2041]: 
     0     1     2    3     4    5     6     7     8     9     10
0  0.25  0.00  0.00  0.0  0.00  0.0  0.94  0.00  0.00  0.63  0.00
1  0.51  0.51   NaN  NaN   NaN  NaN   NaN   NaN   NaN   NaN   NaN
2  0.54  0.54  0.00  0.0  0.63  0.0  0.51  0.54  0.51  1.00  0.51
3  0.81  0.05  0.13  0.7  0.02  NaN   NaN   NaN   NaN   NaN   NaN

现在,只需在每一行中找到最大值:

In [2047]: df.max(axis = 1)
Out[2047]: 
0    0.94
1    0.51
2    1.00
3    0.81

上面,您可以看到所有行中的max

现在,从上面找到max值。那将是整个数据框的最大值。

In [2048]: df.max(axis = 1).max()
Out[2048]: 1.0

要查找此值的索引:

一线解决方案:

In [2082]: pd.DataFrame(Value).max(axis = 1).idxmax()
Out[2082]: 2

让我知道这是否有帮助。