Python。在嵌套列表中根据第二个元素计算每个元素的第三个元素的最大值

2024-06-28 14:57:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道标题有点难理解。对不起,让我解释一下。例如:我们有一个嵌套列表,由4个列表组成,每个列表有3个元素,前两个是字符串(而不是char),第三个是int:

LLList = [ ["A", "B", 30], ["C", "B", 30], ["D", "B", 20], ["D", "L", 60] ]

我想计算“LLList”中元素的数量或返回所有索引(“LLList”中的元素是三元素列表,如[“A”,“B”,30]),其中第三个元素最大,第二个元素为“B”。你知道吗

一种简单的方法是找到第二个元素为“B”的所有元素并将其放入列表中。在这种情况下:

TempList = []

for w in LLList
    if w[1] == "B"
    TempList.append(w)

结果是:

TempList = [ ["A", "B", 30], ["C", "B", 30], ["D", "B", 20] ]

然后找到templast中第三个元素的最大值,在这种情况下是30

MaxB = max(TempList, key = lambda x:x[2])[2] # MaxB = 30

在圣殿骑士团的第3列计算MaxB的出现次数

[p[2] for p in TempList].count(MaxB)

在这种情况下是2

这是一个过于天真的方法,太多的代码,需要太多的内存和时间来完成,我知道,但我想不出比这更好的。我知道一定有一个优雅而有效的方法来解决这个问题,请帮助我,非常感谢!你知道吗


Tags: 方法字符串in元素标题列表for数量
3条回答

简单的使用方法numpy.amax文件和列表理解。你知道吗

这将发现您的价值观:

import numpy as np    
maxB = [x for x in LLList if x[1]=='B' and x[2] == np.amax([x[2] for x in LLList if x[1]=='B'])]

它在x[1]中找到所有具有B的值,x[2]等于具有B的值的最大值

之后,您只需找到索引:

[LLList.index(x) for x in maxB]

也可以使用collections.Counter

from collections import Counter

LLList = [ ["A", "B", 30], ["C", "B", 30], ["D", "B", 20], ["D", "L", 60] ]

a = Counter([i[2] for i in LLList if i[1]=="B"])

print (a.most_common(2))

#[(30, 2), (20, 1)]

print (sorted(a.items(),key=lambda x: x[0],reverse=True)) #or get highest value

#[(30, 2), (20, 1)]
dict_ans = {}
for sub in LLList:
    if sub[1] == 'B':
        dict_ans[sub[2]] = dict_ans.get(sub[2], 0) + 1

print (dict_ans)
#{30: 2, 20: 1}

print (max(value for key, value in dict_ans.items())
#2

相关问题 更多 >