Python实现数字序列拆分为整数列表
拆分字符串为指定整数列表的实现方法
要将字符串'20020050055'拆分为[200, 200, 500, 5, 5]这样的整数列表,核心规则是从左到右优先按3位拆分,剩余不足3位的字符逐个拆分。以下是几种比enumerate更简洁高效的实现:
方法1:循环切片法(直观高效)
这种方法通过直接切片处理完整的3位段,再逐个处理剩余字符,逻辑清晰且性能最优:
s = '20020050055' result = [] i = 0 str_len = len(s) # 处理所有完整的3位片段 while i + 3 <= str_len: result.append(int(s[i:i+3])) i += 3 # 处理剩余的单个字符 while i < str_len: result.append(int(s[i])) i += 1 print(result) # 输出: [200, 200, 500, 5, 5]
方法2:列表推导式+映射(代码简洁)
利用列表推导式生成所有子串,再通过map转换为整数,代码更紧凑:
s = '20020050055' str_len = len(s) # 生成前n-2位的3位子串,再拼接最后两位的单个字符 parts = [s[i:i+3] for i in range(0, str_len - 2, 3)] + list(s[str_len - 2:]) result = list(map(int, parts)) print(result) # 输出: [200, 200, 500, 5, 5]
对比enumerate实现
如果用enumerate实现,需要维护临时缓存来拼接字符,逻辑相对繁琐:
s = '20020050055' result = [] temp = [] for idx, char in enumerate(s): temp.append(char) if (idx + 1) % 3 == 0: result.append(int(''.join(temp))) temp = [] # 处理剩余字符 if temp: if len(temp) == 2: result.extend(int(c) for c in temp) else: result.append(int(''.join(temp))) print(result)
显然前两种方法在代码简洁性和可读性上都更优,且时间复杂度均为O(n),能高效处理任意长度的输入字符串。
内容的提问来源于stack exchange,提问作者nuovo2000ita
相关产品推荐
相关产品推荐

