这是我要处理的列表。 值:
[[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
答案 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
让我知道这是否有帮助。