我有两列,如果A列重复,我想要对B列的值求和。
A = {1 2 3 3 4 4 4}
B = {1 2 3 4 5 6 7}
结果应该如下:
A B
1 1
2 2
3 7
4 18
我的代码:
for i in range(len(a)):
r= np.sqrt(((x-x[j])**2)+((y-y[j])**2)))
if r <= A[i] <= r-5:
B=np.abs((r-0.007)-b[i])
答案 0 :(得分:0)
A1 = [1, 2, 3, 3, 4, 4, 4]
B1 = [1, 2, 3, 4, 5, 6, 7]
A2 = []
B2 = []
for i in range(len(A1)):
if A1[i] != A1[i + 1]:
A2.append(A1[i])
B2.append(B1[i])
else:
j = i + 1
sum = B1[i]
while j < len(A1) and A1[i] == A1[j]:
sum += B1[j]
del A1[j]
del B1[j]
A2.append(A1[i])
B2.append(sum)
if j >= len(A1):
break
print A2
print B2
输出是:
[1,2,3,4]
[1,2,7,18]
答案 1 :(得分:0)
我认为最简单的方法是使用以下算法:
def create_buckets(l):
return [0]*(max(l)+1)
def fill_buckets(A, B):
buckets = create_buckets(A)
for i in range(len(A)):
buckets[A[i]] += B[i]
return buckets
A = [1, 2, 3, 3, 4, 4, 4]
B = [1, 2, 3, 4, 5, 6, 7]
output = fill_buckets(A, B)
for i in range(len(output)):
if output[i] != 0:
print(i, output[i])
我们循环A.假设我们在循环中的索引Y上得到值X:
•我们使用相同的索引(Y)检查列表B上的值
•我们在索引X(索引Y上的A值)上将该值添加到存储桶中
我们打印不为零的桶的每个值(或者如果要允许零,则可以创建另一个默认值)。
答案 2 :(得分:0)
我认为这是最简单的解决方案。
A1 = [1,2,3,3,4,4,4]
B1 = [1,2,3,4,5,6,7] A2 = []
B2 = []
A2.append(A1 [0])
B2.append(B1 [0])
表示范围内的i(len(A1)-1):
if A1[i] != A1[i+1]:
A2.append(A1[i+1])
B2.append(B1[i+1])
else:
A2.pop()
A2.append(A1[i+1])
b = B2.pop()
B2.append(b+B1[i+1])
打印A2
打印B2
输出: A2 = [1,2,3,4] B2 = [1,2,7,18]