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

重复项序列号分配规则:同项共享序号,切换唯一项时跳转至下一号

实现分组序列号分配逻辑

我来帮你搞定这个序列号分配的需求——核心就是把连续的相同项归为一组,同一组共用一个序列号,切换到新组时自动递增序列号。下面我用Python写个可运行的示例,你可以根据自己用的语言调整逻辑,思路是通用的。

核心思路拆解

  • 拆分初始序列号:把带前缀的序列号拆成「固定前缀」和「可递增的数字部分」,比如GST-17/18/SO-004072拆成前缀GST-17/18/SO-和数字4072。
  • 跟踪当前状态:记录当前处理的项值和对应的序列号,这样遇到新项时就能判断是否要换号。
  • 切换项组时更新序列号:每次遇到不一样的项,就把数字部分加1,再补零恢复成原有的6位格式,重新拼接成新序列号。
  • 批量分配:遍历所有项,给每个项分配对应的序列号。

代码示例

def assign_serial_numbers(start_serial, item_list):
    # 从右往左拆分一次,分离前缀和数字部分(兼容前缀里带'-'的情况)
    prefix, num_str = start_serial.rsplit('-', 1)
    current_num = int(num_str)
    current_item = None
    assignments = []
    
    for item in item_list:
        if item != current_item:
            current_item = item
            # 第一个项组用初始序列号,之后的组才递增
            if assignments:
                current_num += 1
            # 把数字格式化成6位,补前导零
            formatted_num = f"{current_num:06d}"
            current_serial = f"{prefix}-{formatted_num}"
        
        assignments.append((item, current_serial))
    
    return assignments

# 用你的示例数据测试
start_serial = "GST-17/18/SO-004072"
item_list = [773, 773, 289, 289, 912, 912, 912, 912, 644, 644, 644]
result = assign_serial_numbers(start_serial, item_list)

# 打印分配结果
for item, serial in result:
    print(f"项 {item} → 序列号 {serial}")

运行结果说明

跑这段代码后,输出会完全符合你的要求:

  • 所有773项对应GST-17/18/SO-004072
  • 所有289项对应GST-17/18/SO-004073
  • 所有912项对应GST-17/18/SO-004074
  • 所有644项对应GST-17/18/SO-004075

适配其他语言的注意点

如果不用Python,核心逻辑是一样的:

  • 拆分字符串时找最后一个-的位置,分离前缀和数字
  • 用变量跟踪当前项和当前数字
  • 数字递增后要补前导零,保持位数一致(比如6位)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:33:29