遍历列表列表以查找最大值

时间:2019-11-22 01:34:23

标签: python python-3.x list

以下显示了我拥有的列表列表的示例:

[[['point_5', [5, 6, 7, 8], 11.0],
['point_5', [6, 7, 8, 9],12.57]],
[['point_18', [3, 4, 5, 6],6.25],
['point_18', [3, 5, 6, 7],7.2],
['point_18', [4, 5, 6, 7],7.55],
['point_18', [6, 7, 8, 9],14.0],
['point_19', [3, 5, 6, 7],8.166],
['point_19', [5, 6, 7, 8],9.285],
['point_19', [6, 7, 8, 9],11.0]]]

我需要定义一个循环,该循环搜索列表的此列表的每个元素,并返回每个列表的最后一个元素的最大值。我的意思是,例如对于[6,7,8,9],我们有:

['point_5', [6, 7, 8, 9], 12.57]
['point_18', [6, 7, 8, 9],14.0]
['point_19', [6, 7, 8, 9],11.0]

max(12.57,14.0,11.0) = 14.0起,我要查找的是其元素之一为[point_18,[6,7,8,9],14.0]的列表。

另一个示例是,由于唯一具有[3, 4, 5, 6]的元素是['point_18', [3, 4, 5, 6],6.25],因此新列表的另一个元素应该是[point_18,[3,4,5,6],6.25]

实际上,我要创建的新列表列表应该类似于以下列表:

New_list = [['point_5',[5,6,7,8],11.0],['point_18',[6,7,8,9],14.0],['point_18', [3, 4, 5, 6],6.25],['point_19', [3, 5, 6, 7],8.166],['point_18', [4, 5, 6, 7],7.55]].

我不确定这是否是个好主意,但我所做的是首先我尝试通过以下代码提取列表中的每个唯一[x,y,i,j]:

A = []
for i in bob:
    for j in i:
        A.append(j[1])
import itertools
A.sort()
B = list(A for A,_ in itertools.groupby(A))

现在B是:

[[3, 4, 5, 6],
 [3, 5, 6, 7],
 [4, 5, 6, 7],
 [5, 6, 7, 8],
 [6, 7, 8, 9]]

然后我要在列表的主列表中搜索此列表的每个元素,并找到最大值。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

我认为您可以尝试将问题分成几部分。

我不知道您是否已经完成第一步的列表,所以我假设没有

这是我正在使用的列表:

your_list = [['point_5', [5, 6, 7, 8], 11.0],
            ['point_5', [6, 7, 8, 9],12.57],
            ['point_18', [3, 4, 5, 6],6.25],
            ['point_18', [3, 5, 6, 7],7.2],
            ['point_18', [4, 5, 6, 7],7.55],
            ['point_18', [6, 7, 8, 9],14.0],
            ['point_19', [3, 5, 6, 7],8.166],
            ['point_19', [5, 6, 7, 8],9.285],
            ['point_19', [6, 7, 8, 9],11.0]]

首先,尝试按字典对列表进行排序。

sorted_dict = {}
for i in your_list:
    if tuple(i[1]) in sorted_dict:
        sorted_dict[tuple(i[1])].append(i)
    else:
       sorted_dict[tuple(i[1])] = [i]

然后,选择最大值并将其放入列表中。

return_list = []
for key, values in sorted_dict.items():
    print(values)
    return_list.append(sorted(values, key=lambda x: float(x[2]))[-1]) # sort the list according to the third value

返回列表现在应该具有您要查找的值

我不确定这是否是您要查找的内容,如果有任何问题,请发表评论