从列表中找到最高元素的索引(涉及嵌套列表)

3
这是我正在处理的列表。 值:
[[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] 不在列表中


3个回答

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
你也可以把它写成一行代码:

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=...),该函数具有选择枚举元组(position,value)中最高值(而不是位置)的key优点 - 它使用generators
您不会创建任何中间列表,而是仅使用生成器 - 对于大型列表,这比像infiQuanta一样创建列表更加节省内存。

0
你可以使用Python的库来解决这个问题。解决方案变得非常简单:

从你的列表中创建一个数据框(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

如果这有帮助,请让我知道。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接