重复项序列号分配规则:同项共享序号,切换唯一项时跳转至下一号
实现分组序列号分配逻辑
我来帮你搞定这个序列号分配的需求——核心就是把连续的相同项归为一组,同一组共用一个序列号,切换到新组时自动递增序列号。下面我用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
相关产品推荐
相关产品推荐

