Python:基于前两个内部列表值删除列表重复项

问题描述 投票:0回答:1

我有以下格式的列表:

x = [["hello",0,5], ["hi",0,6], ["hello",0,8], ["hello",1,1]]

算法:

  • 全部合并内部列表具有相同的2个起始值,第三个值不必相同即可组合
    • 例如"hello",0,5 "hello",0,8
    • 组合
    • 但是不是"hello",1,1组合
  • << [第3个值成为第三个值的平均值:sum(all 3rd vals) / len(all 3rd vals)
      注意:all 3rd vals是指每个内部重复列表的第3个值
  • 例如"hello",0,5"hello",0,8变为hello,0,6.5
  • 所需的输出:(列表的顺序无关紧要)

    x = [["hello",0,6.5], ["hi",0,6], ["hello",1,1]]

    问题:

      如何在Python中实现此算法?
  • 理想情况下,这样做会很有效,因为它将用于非常大的列表。

    如果不清楚,请告诉我,我会解释。

    编辑:我试图将列表更改为一个集合以删除重复项,但是,这不能说明内部列表中的第三个变量,因此不起作用。

  • python python-3.x processing-efficiency
    1个回答
    1
    投票
    但这可能不是很有效,因为它必须累加所有值以求平均值。我认为您可以通过添加加权平均值来实现此目的,但是我不太确定如何做到这一点。

    from collections import defaultdict def avg(nums): return sum(nums) / len(nums) def func(lst): third = defaultdict(list) for sub in lst: k = tuple(sub[:2]) third[k].append(sub[2]) lst_out = [[*k, avg(v)] for k, v in third.items()] return lst_out print(func(x)) # -> [['hello', 0, 6.5], ['hi', 0, 6.0], ['hello', 1, 1.0]]

    © www.soinside.com 2019 - 2024. All rights reserved.