我的数据格式如下:
[[(0, 0.83094628739162768), (1, 0.084504341129265095), (2, 0.08454937147910728)]
[(0, 0.89691374553960401), (1, 0.050770065151842916), (2, 0.052316189308553113)]
[(0, 0.86427304752389367), (1, 0.068236225898229905), (2, 0.067490726577876414)]
[(0, 0.06737356458000561), (1, 0.86516097670024872), (2, 0.067465458719745686)]]
第一个值(例如,0,1,2)是组名;第二个值(例如,0.865160)是分数。我想找出每个列表中得分最高的组名。所以最终的结果应该是:
0
0
0
1
答案 0 :(得分:4)
您可以在一行中解决此问题!
results = [max(collection, key=lambda x: x[1])[0] for collection in data]
我们使用列表推导来处理数据中的每个集合,然后找到具有最大第二个元素的元组。然后我们采用该元组的第一个元素来获取组号。
这里的关键是max的key
参数,你可以传递一个任意函数,该函数将应用于序列的元素,结果将用作要比较的值。
答案 1 :(得分:1)
您可以使用max
函数查找每个列表中得分最高的索引,例如:
>>> sublist = [(0, 0.83094628739162768), (1, 0.084504341129265095), (2, 0.08454937147910728)]
>>> index = max(sublist, key=lambda tup: tup[1])[0]
然后,您可以使用map将其应用于主列表中的所有子列表:
>>> fn = lambda l : max(l, key=lambda tup: tup[1])[0]
>>> indices = map(fn, main_list)