Python:如何检测列表中的重复项以发出不同操作的信号

标签 python list loops

我有一个大型数据表,我已将其拆分为单独的列表,例如:(lists virticle)

A=[1,1,2,2,3,3,3]
B=[6,3,5,3,8,4,3]

我想要实现的是 2 个新列表,其中列表 A 被压缩为非重复值,并且重复值出现在 A 中,B 的新对应值是添加对应于该值的元素,因为例如,我希望这两个新列表是:

C=[1,2,3]
D=[9,8,15]

我想将其扩展到列表中的大量数据,我该如何实现?

最佳答案

使用itertools.groupby ,

import itertools
import operator
import collections

A=[1,1,2,2,3,3,3] 
B=[6,3,5,3,8,4,3]

d = collections.OrderedDict()

for key, group in itertools.groupby(zip(A, B), key=operator.itemgetter(0)):
    d[key] = sum(map(operator.itemgetter(1), group))


C = d.keys()        # [1, 2, 3]
D = d.values()      # [9, 8, 15]

在一行中使用列表理解,

d = collections.OrderedDict({key : sum(map(operator.itemgetter(1), group)) 
                            for key, group in itertools.groupby(zip(A, B), key=operator.itemgetter(0))})

关于Python:如何检测列表中的重复项以发出不同操作的信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42397921/

相关文章:

python - 在同一轴上创建两个标签并填补周末空白

python - 将列表列表转换为字符串列表

python - 如何使用 List Comprehensions 在一行中打印列表中的一系列整数?

java - java中如何限制用户输入一定范围内的数字?

python - 如何在Python中的类中分配和调用变量

python - 我如何动态填充和删除小部件的字典?

Python 列表([])和 []

javascript - 如何使用 v-for 迭代元素

Python for 循环没有遍历所有项目

python - 仅在右箭头后将字符串设为小写