Scala实现元素出现次数统计及对应数值求和方案咨询
实现思路与代码示例
这需求本质就是分组统计+数值聚合,核心步骤是先把相同水果的条目归为一组,再分别计算出现次数和数值总和,最后拼接成你要的字符串格式。我给你用两种常用语言实现,你可以按需选用:
Scala 实现(匹配你输入的变量风格)
从你的变量写法来看,应该是用Scala,直接按这个思路写:
val lisinputt = List("banana 10", "apple 20", "apple 30", "banana 10", "berry 10") val listoutput = lisinputt // 把每个字符串拆成水果名和整数数值 .map { str => val Array(fruit, numStr) = str.split(" ") (fruit, numStr.toInt) } // 按水果名分组 .groupBy(_._1) // 对每个分组计算次数和总和,再拼接成目标字符串 .map { case (fruit, entries) => val count = entries.size val total = entries.map(_._2).sum s"$fruit $count $total" } .toList // 执行后listoutput就是你要的结果:List("banana 2 20", "apple 2 50", "berry 1 10")
Python 实现
如果用Python的话,借助collections.defaultdict会很方便:
from collections import defaultdict lisinputt = ["banana 10", "apple 20", "apple 30", "banana 10", "berry 10"] # 用字典存每个水果的(出现次数, 数值总和),默认初始值是[0,0] fruit_stats = defaultdict(lambda: [0, 0]) for item in lisinputt: # 分割字符串,自动处理多空格的情况用split()不带参数 fruit, num = item.split() num = int(num) fruit_stats[fruit][0] += 1 # 次数加1 fruit_stats[fruit][1] += num # 数值累加 # 转换成要求的字符串格式 listoutput = [f"{fruit} {count} {total}" for fruit, (count, total) in fruit_stats.items()] # 结果:['banana 2 20', 'apple 2 50', 'berry 1 10']
小提示
如果你的输入字符串可能存在多个空格分隔的情况,把split(" ")改成split()(不带参数)就可以自动分割任意数量的空白字符;如果有非整数的异常情况,可以加个try-except块来处理,不过按你的输入示例是完全没问题的。
内容的提问来源于stack exchange,提问作者user9683185
相关产品推荐
相关产品推荐

