在列表中查找重复的值,将它们相加并移动结果到另一个列表。

3

我有一个列表,想要找到其中的重复值,并将它们添加到一个临时列表中,然后计算这些重复值的总和,最后将这个结果添加到另一个列表中。以下是我的代码,但是得到的结果是[15,6],而不是我期望的[20,12,16]。我无法包含所有的重复数字,也无法让for循环包含重复值的最后一个数字。请看一下我目前的代码,任何评论都会帮助到我:

start_list = [5,5,5,5,6,6,8,8]
temp_list = []
final_list = []

for i in range(len(start_list )-1):
    if start_list [i] == start_list [i+1]:
        temp_list.append(start_list [i])
    else:
        total = sum(temp_list)
        final_list .append(total)
        temp_list = []

print(final_list)

什么被认为是相似的数字? - Matiiss
请注意以下程序相关内容:1/ range(n) 迭代从 0 至 (n-1) 2/ 在您的 if 块中,总是会漏掉一个相同的值(尝试在纸上运行并查看...) - Thierry Lathuille
如果您不关心列表的顺序,可以这样做:l = [5,5,5,5,6,6,8,8],然后执行 [l.count(i)*i for i in set(l)] - user9321739
从我提供的列表[5,5,5,5,6,6,8,8]中,类似的项为5、6和8。 - Musclemania05
@Musclemania05 你会如何处理 [5,5,5,5,6,6,8,8,5,5]?是 [20, 12, 16, 10] 还是 [30, 12, 16] - Wondercricket
似乎使用collections的计数器方法可以处理这个问题并产生[30,12,16],这是我所期望的。 - Musclemania05
2个回答

3

只需要使用一个计数器:

from collections import Counter

start_list = [5,5,5,5,6,6,8,8]

c = Counter(start_list)
print([x*n for x, n in c.items()])

是的,如果无序的话,这似乎也可以工作 [5,5,5,5,6,6,8,8,5,5] ----- > [30,12,16] - Musclemania05
我在想,如果我使用一个200X2的数据集,其中有两列(时间戳和值),并且我想要查找相似的日期、月份和年份的时间戳,那么这样做是否有效?如果是,将这些行添加到临时列表中,并找出该天最小/最大值之间的差异,这样说是否清楚明白? - Musclemania05
@Musclemania05 这听起来像是一个单独的问题,特别是如果你正在使用Pandas,答案会有所不同。 - Reinderien
你可以通过将Counter放在列表推导式中来缩短这段代码。print([x*n for x, n in Counter(start_list).items()]) - user9321739

0

从 collections 模块导入 Counter

test=[5,5,5,5,6,6,8,8,8]
test1=Counter(test);
test2=[]

for i in test1: 
    if i==5:
        test1[i]=i*4
        test2.append(test1[i])
    elif i==6:
        test1[i]=i*2
        test2.append(test1[i])
    else:
        test1[i]=i*2
        test2.append(test1[i])
print(test1) 
print(test2)       

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接