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

如何编写Kdb+函数将列表拆分为指定大小的子集?

解决Kdb+列表按指定长度拆分的问题

正确的拆分函数

通过计算每个子集的起始索引,可实现批量拆分:

splitList:{[lst;sizes] lst each (0, sums sizes except last) +/: til each sizes}

测试验证

q)list:`a`b`c`d`e`f`g`h`i
q)splitList[list;2 3 4]
`a`b
`c`d`e
`f`g`h`i

函数逻辑解析

  • sizes except last:排除最后一个长度,避免生成多余的起始位置
  • sums ...:对剩余长度做累积求和,得到后续子集的起始偏移量(此处为2,5)
  • 0, ...:拼接初始起始位置0,得到完整的起始索引列表0,2,5
  • +/: til each sizes:将每个起始索引与对应长度的索引序列(til 2/til3/til4)相加,生成每个子集的索引范围
  • lst each ...:用原列表批量提取对应索引的元素,得到拆分后的结果

简化写法

也可直接截取前n-1个长度做累积求和:

splitList2:{[lst;sizes] lst each (0, sums sizes[:-1]) +/: til each sizes}

错误原因分析

你之前的函数始终从索引0开始提取元素,没有动态更新起始位置。核心问题是未计算每个子集的起始偏移量,通过累积求和sums可解决该问题,让每个子集的起始位置等于前一个子集的长度之和。

内容的提问来源于stack exchange,提问作者Rajasekhar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 09:47:56