给定这两个列表
L2 = [A,B,C,D,A,B]
L3 = [3,2,1,2,2,1]
我要获取
L2_WANTED = [A,B,C,D]
L3_WANTED = [5,3,1,2]
列表总是有序的,相同的大小和元素对应为键值对,例如 A:3、B:2 等等。
目标是消除 L2 中的 dups 并对 L3 中的相应项求和以获得具有匹配对的新列表。这是为了在将项目添加到列表时保留项目列表。
我尝试用 index
编写一个函数,但它开始变得丑陋。我检查了 itertools
但找不到任何相关的东西;我查看了 starmap()
但无法使其正常工作。也许这也可以通过列表理解来完成。我将不胜感激有关如何实现这种最简单方法的任何线索或指示。谢谢。
EDİT
@SimonC:
>>> l2_sum = {}
>>> for i in range(0, len(L2)):
key = L2[i]
num = L3[i]
l2_sum[key] = l2_sum.get(key, 0) + num
>>> l2_sum
{'A': 5, 'C': 1, 'B': 3, 'D': 2}
>>>
这如何消除欺骗并添加数字?你能给个线索吗?谢谢。
最佳答案
我相信那里有更优雅的答案,并且会出现在回复中。
但对于一些简单的答案:
L2 = ['A','B','C','D','A','B']
L3 = [3,2,1,2,2,1]
L4 = zip(L2, L3)
L5 = []
L6 = []
def freduce(l):
for x, y in l:
print x , y
if x in L5:
k = L5.index(x)
L6[k] += y
else:
L5.append(x)
L6.append(y)
freduce(L4)
print L5
print L6
输出:
['A', 'B', 'C', 'D']
[5, 3, 1, 2]
[为理解第二个实现而编辑的答案]
>>> L3 = [3,2,1,2,2,1]
>>> L2 = ['A','B','C','D','A','B']
>>> range(0, len(L2))
[0, 1, 2, 3, 4, 5]
>>>
因此在 for i in range(0, len(L2)): ... i 成为一个索引
使用此索引,您可以通过执行以下操作从 L3 和 L2 中提取信息:
key = L2[i]
num = L3[i]
然后你向字典添加信息
l2_sum[key] = l2_sum.get(key, 0) + num
如果键不存在,l2_sum.get(key, 0) 返回 0,否则返回当前值。
我希望它足够清楚。
关于python - 消除重复项并对列表中的相应项求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4084369/