比较python中的行元素

时间:2012-07-27 11:05:23

标签: python arrays list numpy compare

我们有一个清单:

import numpy as np


A=[(2, 2, 0), (1, 5, 0), (6, 8, 0), (2, 2, 2) ]

ax=np.asarray([row[0] for row in A])
ay=np.asarray([row[1] for row in A])
az=np.asarray([row[2] for row in A])

print (ax,ay,az)

我想比较ax与ay,当我找到相等的对,其中ax == ay喜欢(2,2,0)和(2,2,2)我保持一对,但添加az值。所以在我们的例子中,新的通缉名单B将是:

B=[(2, 2, 2), (1, 5, 0), (6, 8, 0)]

如果有一些代码对于真正庞大的列表也会很有效,那将是很好的。

1 个答案:

答案 0 :(得分:1)

如果订单不重要

from collections import defaultdict

dd = defaultdict(int)
for x, y, z in A:
    dd[(x,y)] += z
res = [k + (v,) for k, v in dd.iteritems()]
# [(1, 5, 0), (6, 8, 0), (2, 2, 2)]

如果订单很重要

from operator import itemgetter

d = {}
for idx, (x, y, z) in enumerate(A):
    pos, freq = d.get((x,y), (0,0))
    d[(x,y)] = min(pos, idx), freq + z

res = sorted((k + (v[1],) for k, v in d.iteritems()), key=itemgetter(1, 1))
# [(2, 2, 2), (1, 5, 0), (6, 8, 0)]