python - 消除重复项并对列表中的相应项求和

标签 python list-comprehension python-itertools

给定这两个列表

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/

相关文章:

python - celery :错误:无法识别的参数:worker -A test_tasks -l info -c 5

Python pandas if 语句基于 boolean 限定符

python - 列出对不同长度元素的理解

python - 根据第一个字符对列列表(年份)进行切片

python:itertools.product 上的队列问题

python - 在python中分配数组(列表)算法排列

python - 通过 itertools.product 在列表中使用列表

python - 错误: 'str' object has no attribute 'shape' while trying to covert datetime in a dataframe

python - 在模块上运行 2to3.py 后仍然存在错误

python - Python中不带[]的列表理解