You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:03:56