Python数据序列化问题:按规则实现并修正错误代码
Python字符串序列化实现方案
需求说明
按以下规则对字符串列表序列化:
- 取每个字符串的首字符+尾字符作为前两位
- 拼接从
01开始的两位序号
示例:
Input: ["HOMAGE", "DESIGN", "PROTECTION", "COMPANY"]
Output: ["HE01", "DN02", "PN03", "CY04"]
现有代码问题
你的代码存在几个关键问题:
- 循环内部直接
return ser,导致函数第一次循环就终止,只处理了第一个元素 - 逻辑错误:没有提取首/尾字符,反而拼接了整个字符串和从0开始的索引,也没做补零处理
- 全局的
ser列表未被正确利用,函数内重新赋值覆盖了变量
正确实现方案
基础循环版(适合新手理解)
ls = ["HOMAGE", "DESIGN", "PROTECTION", "COMPANY"] def serialize(lis): result = [] # enumerate从1开始计数,同时拿到序号和对应字符串 for idx, s in enumerate(lis, start=1): # 提取首字符和尾字符 first = s[0] last = s[-1] # 把序号格式化为两位数字,自动补零 serial = f"{idx:02d}" # 拼接后加入结果列表 result.append(first + last + serial) return result output = serialize(ls) print(output) # 输出: ['HE01', 'DN02', 'PN03', 'CY04']
简洁列表推导式版(Pythonic写法)
如果熟悉列表推导式,可以用更简洁的写法:
ls = ["HOMAGE", "DESIGN", "PROTECTION", "COMPANY"] output = [f"{s[0]}{s[-1]}{idx:02d}" for idx, s in enumerate(ls, start=1)] print(output)
关键知识点
enumerate(lis, start=1):遍历列表时同时获取从1开始的序号,避免手动计算索引s[-1]:Python负索引,直接取字符串最后一个字符,不用计算长度f"{idx:02d}":格式化字符串语法,将数字转为两位宽度的字符串,不足两位时前面补零
内容的提问来源于stack exchange,提问作者danuw
相关产品推荐
相关产品推荐

