我有一个列表,它是
a = [(0, 0.6249995), (1, 0.12500015), (2, 0.12500016), (3, 0.12500015)]
0,1,2,3是基于LDA建模的主题,0.6249995,0.12500015,0.12500016和0.12500015是概率。
我只需要访问具有最大概率的元素,即(0, 0.6249995(。
如何编写 for 循环来执行此操作?
我尝试了这样的事情:
for i in range(len(a[0]) - 1):
for j in range(len(a)):
print(max(a[j][1]))
但这行不通,它只是给了我所有的可能性。
我可以对此进行哪些更改?
以下是您可以做的(Alexander Lekontsev击败了我(:
print(max(a, key=lambda i:i[-1])) #prints element
print(a.index(max(a, key=lambda x:x[-1]))) #prints index of max probability
lambda
的作用是 max 函数根据给定的条件(列表a
中每个元素的最后一个索引(进行评估,并返回具有最大概率的元组。
您可以将max()
函数与 lambda 表达式一起使用来获取元组的第二项:
a = [(0, 0.6249995), (1, 0.12500015), (2, 0.12500016), (3, 0.12500015)]
max_prob = max(a, key=lambda t: t[1])
print(max_prob)
输出:
(0, 0.6249995)
试试这个,它有效。
a = [(0, 0.6249995), (1, 0.12500015), (2, 0.12500016), (3, 0.12500015)]
new = list()
for i in a:
new.append(i[1])
print(max(new))
data = [(0, 0.6249995), (1, 0.12500015), (2, 0.12500016), (3, 0.12500015)]
from itertools import groupby
item = next(groupby(sorted(data, key=lambda x: x[1], reverse=True),
key=lambda x: x[1]))
print(list(item[1]))
输出:
[(0, 0.6249995)]
理论上,可能有多个项目,其概率=最大概率。这解释了这种可能性,例如
如果
data = [(0, 0.0249995), (1, 0.12500015), (2, 0.12500016),
(3, 0.12500015), (4, 0.3), (5, 0.3)]
输出为:
[(4, 0.3), (5, 0.3)]
下面是一个易于理解的方法;
import sys
maxVal = sys.float_info.min
for t in a:
if t[1] > maxVal:
maxElement = t
maxVal = t[1]
print(maxElement)
由于列表包含元组,元组的每个值都可以通过 t[0], t[1] 访问
如果可能有多个具有最大概率的元素,则可以使用另一个列表并附加到该列表。如下所示;
import sys
maxList = []
maxVal = sys.float_info.min
for t in a:
if t[1] >= maxVal:
maxVal = t[1]
maxList.append(t)
print(maxList)