现在,我有一个嵌套列表,我需要一个函数来创建一个新列表,该列表将元素0和元素1相同时组合在一起。如果它们相同,则还将第三个元素加在一起。
样本输入:
input_list = [['123', '6', '2'], ['123','4','55'], ['123','6','3']
预期输出:
output_list = [['123','6','5'], ['123','4','55']]
123和6相同,因此将它们合并,然后2 + 3 = 5
123,4,55没有任何重复,因此保持不变
谢谢你前进
针对此问题,因为内部列表中位于位置0和1的元素必须相同,才能将第三个值加在一起,然后显示结果,因此,所有需要做的就是对前两个值进行哈希处理,如果有重复出现,则添加该哈希对的值。
在python dict中提供了此功能,因此您可以以这种方式实现
input_list = [['123', '6', '2'], ['123','4','55'], ['123','6','3']]
res = {}
for i in input_list:
if (i[0], i[1]) not in res:
res.update({(i[0], i[1]):int(i[2])})
else:
res[(i[0],i[1])]+=int(i[2])
output_list = [[k[0],k[1], str(v)] for k,v in res.items()]
print(output_list)
输出
[['123', '6', '5'], ['123', '4', '55']]
您可以使用字典聚合同一键的值,并使用列表推导从字典构建所需的输出列表:
output = {}
for *key, value in input_list:
key = tuple(key)
output[key] = output.get(key, 0) + int(value)
output_list = [[*key, str(value)] for key, value in output.items()]
output_list
变为:
[['123', '6', '5'], ['123', '4', '55']]
由于您已经解释说,您需要指导而不是完整的答案,所以我将发表我以前的评论以及一些额外的讨论。
对我来说,解决方案是一次使用pop()取出一个元素,然后通过迭代并检查具有[0]和[1]的其余元素来查看其余输入项目。
[如果有,我还将pop()该元素,将第三个元素加起来并完成迭代。完成后,结果元素将进入输出列表。
然后重复,直到输入中没有更多元素。
[该算法背后的思想,我想在这里给出另一个答案,试图避免对同一元素进行多次处理。从处理的角度来看,任何不使用完整嵌套循环的解决方案都是可以的。