繁体   English   中英

用Python方式合并列表中的部分冗余对象

[英]Pythonic way to consolidate partially redundant objects in a list

我有一类具有整数多项式指数i,j和k的函数,还有一个浮点系数c和一些无关的输入变量,例如

G(i,j,k,c,a,A)

我有这些对象的列表,并想通过添加它们的c来合并i,j和k相同的对象,例如,我想减少

[G(0, 0, 1, 2.0, a, A), G(0, 1, 0, 4.0, a, A), G(0, 0, 1, 1.0, a, A)]

[G(0, 0, 1, 3.0, a, A), G(0, 1, 0, 4.0, a, A)]

有没有公​​认的pythonic /有效方法来做到这一点? 我还没有找到执行此操作的任何示例,但似乎经常会出现这种情况。

编辑:为清楚起见,下面是实际的类定义。

class PrimitiveGaussian:
    #Primitive Gaussian of arbitrary Cartesian exponents
    #See Helgaker p. 336 for index conventions
    def __init__(self, i = 0, j = 0, k = 0, a = 1.0, A = np.array([0.0,0.0,0.0]), coefficient = 1.0):
        self.i = i
        self.j = j
        self.k = k
        self.a = a
        self.A = A
        self.coefficient = coefficient

您可以在该列表的排序版本上使用itertools.groupby ,并将前三个项目指定为键:

test = [(0, 0, 1, 2.0, 'a', 'A'), (0, 1, 0, 4.0, 'a', 'A'), (0, 0, 1, 1.0, 'a', 'A')]

from functools import reduce
import itertools as it

result = [reduce(lambda x, y: (*x[:3], x[3]+y[3], *x[4:]), g)
          for k, g in it.groupby(sorted(test), key=lambda x: x[:3])]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM