如何在列表中添加所有相同的浮点值,然后将这些值放在新列表中

How to add all the same float values in a list then placing these values in a new list

如果我有一个包含重复值的浮点数列表 (listA),我如何将相同的重复值加在一起并将它们放入一个新列表 (listB)?

例如:

listA = [1.356, 7.663, 12.466, 1.356, 7.663, 12.466, 1.356, 7.663, 12.466]

值 1.356、7.663、12.466 重复 3 次。 我想将相同的值加在一起并将它们放在一个新列表中:

listB = [4.068, 22.989, 37.398]

第一个值是所有 1.356 的总和,第二个值是 7.663 等的总和

您使用一个循环获取列表中的每个元素并检查它是否在下一个值中以及它是否已不存在于目标列表中。

在下一个循环中,您再次检查以下元素,因为您已经检查了要与之前的元素进行比较的元素。

这样您就可以不检查以前的值,因为它们已经过验证。

listA = [1.356, 7.663, 12.466, 1.356, 7.663, 12.466, 1.356, 7.663, 12.466]
listB = []

iterator = 0
for index in listA:
    if index in listA[iterator + 1:]:
        if index not in listB:
            listB.append(index)
    iterator += 1

print(listB)

这可以分为两步:

  1. 计算每个数字出现的频率
  2. 将每个数字乘以它出现的频率并将结果添加到列表中

第一步是 collections.Counter 存在的目的。

>>> from collections import Counter
>>> c = Counter(listA)
>>> c
Counter({1.356: 3, 7.663: 3, 12.466: 3})

第二步,使用 Counter 对象的 items 方法(继承自 dict)遍历 Counter 对象中的 (value, count) 对:

>>> listB = []
>>> for value, count in c.items():
...     listB.append(value * count)
...
>>> listB
[4.0680000000000005, 22.989, 37.397999999999996]

或者简而言之:

listB = [value * count for value, count in Counter(listA).items()]