如何使用循环访问列表元素的特定部分?



我有一个列表,它是

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)

最新更新