以下显示了我拥有的列表列表的示例:
[[['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]]
然后我要在列表的主列表中搜索此列表的每个元素,并找到最大值。
任何帮助将不胜感激。
答案 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
返回列表现在应该具有您要查找的值
我不确定这是否是您要查找的内容,如果有任何问题,请发表评论