[英]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.