【问题标题】:Find similar items in list, add them and then add the result to another list在列表中查找相似的项目,添加它们,然后将结果添加到另一个列表
【发布时间】:2021-09-28 08:01:55
【问题描述】:

我有一个列表,我正在尝试查找相似项目,将它们添加到临时列表中,找到相似项目的总和,然后将该结果添加到另一个列表中。我得到的结果是 [15,6] 以下但我期望得到 [20,12,16]?我似乎无法包含所有相似的数字,并且似乎无法让 for 循环包含相似项目的最后一个数字。到目前为止,请看一下以下代码,任何 cmets 会有所帮助吗?

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)

【问题讨论】:

  • 什么被认为是相似的数字?
  • 请注意 1/ range(n) 在您的 if 块中从 0 迭代到 (n-1) 2/,您总是会错过其中一个相同的值(尝试用笔和纸运行看看...)
  • 如果你不关心列表的顺序可以l = [5,5,5,5,6,6,8,8],然后[l.count(i)*i for i in set(l)]
  • 我提供的列表中的相似项目 [5,5,5,5,6,6,8,8] 是 5,6,8
  • @Musclemania05 你会如何处理[5,5,5,5,6,6,8,8,5,5][20, 12, 16, 10][30, 12, 16]

标签: python python-3.x list loops iterator


【解决方案1】:

只需使用计数器:

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 ]
  • 我想知道如果我使用具有两列(时间戳和值)的 200X2 数据集并且我想查找按日、月和年相似的时间戳,它是否也有效,如果是这样,将这些行添加到临时列表中,并找出当天的最小值/最大值之间的差异是否有意义?
  • @Musclemania05 这听起来像是一个单独的问题,特别是如果您使用 Pandas,答案会有所不同。
  • 您可以通过将 Counter 放在列表理解中来缩短此代码。 print([x*n for x, n in Counter(start_list).items()])
猜你喜欢
  • 1970-01-01
  • 2017-02-20
  • 1970-01-01
  • 1970-01-01
  • 2021-08-18
  • 2013-03-25
  • 2017-03-26
  • 1970-01-01
  • 2014-06-03
相关资源
最近更新 更多