如何从字符串中提取所有整数并转为整数列表?
嘿,我懂你想要更简洁优雅的方式从字符串里提取所有整数到列表里,你的现有代码确实有点冗余,这里给你几个高效的方案,完全符合你想用内置函数、lambda或列表推导式的需求:
方案1:正则表达式(最简洁高效)
正则表达式是处理这类字符串提取问题的利器,re.findall可以直接匹配出所有连续的数字,不管字符串里的分隔符是括号、逗号还是空格,都能完美提取多位数:
import re def extract_integers(s): # 匹配一个或多个数字,转成整数列表 return list(map(int, re.findall(r'\d+', s))) # 测试示例 print(extract_integers('(3, 10)')) # 输出 [3, 10] print(extract_integers('3 10')) # 输出 [3, 10]
方案2:无正则的简洁迭代法
如果你不想引入re模块,这个优化后的迭代方法比你原来的代码简洁很多,避免了空字符串过滤的步骤:
def extract_integers(s): current_num = '' nums = [] for char in s: if char.isdigit(): current_num += char elif current_num: nums.append(int(current_num)) current_num = '' # 处理字符串末尾的最后一个数字 if current_num: nums.append(int(current_num)) return nums # 测试示例 print(extract_integers('(3, 10)')) # 输出 [3, 10] print(extract_integers('3 10')) # 输出 [3, 10]
对比你的原有代码
你的代码里用了enumerate,还需要额外过滤空字符串,而上面的方法要么用正则一步到位,要么通过更清晰的逻辑避免了空值的产生,代码更紧凑易读。
内容的提问来源于stack exchange,提问作者user669132
相关产品推荐
相关产品推荐

