Python列表字符串格式化问题:去除元素内换行与冗余空格
问题:去除列表字符串中的换行与冗余空格
问题详情
有一个包含换行和多余空格的字符串列表,尝试使用strip('\n \n ')处理后无效果,需要将每个元素中的换行及冗余空格去除,得到格式规整的目标列表。
原列表
data = ['Height:\n \n 6\' 4"', 'Weight:\n \n 185 lbs.', 'Reach:\n \n 80"', 'STANCE:\n \n Switch', 'DOB:\n \n \n Jul 22, 1989', 'SLpM:\n \n\n 3.93', 'Str. Acc.:\n \n 49%', 'SApM:\n \n 2.67', 'Str. Def.:\n \n 59%', '', 'TD Avg.:\n \n 0.00', 'TD Acc.:\n \n 0%', 'TD Def.:\n \n 78%', 'Sub. Avg.:\n \n 0.2']
尝试的代码
for info in data: info.strip('\n \n ')
预期目标列表
data = ['Height: 6\' 4"', 'Weight: 185 lbs.', 'Reach: 80"', 'STANCE: Switch', 'DOB: Jul 22, 1989', 'SLpM: 3.93', 'Str. Acc.: 49%', 'SApM: 2.67', 'Str. Def.: 59%', '', 'TD Avg.: 0.00', 'TD Acc.: 0%', 'TD Def.: 78%', 'Sub. Avg.: 0.2']
问题原因
strip()不修改原字符串:strip()方法会返回处理后的新字符串,不会改变原变量的值,所以循环中只调用strip()但不赋值,原列表完全没变化。strip()只能处理首尾字符:你指定的strip('\n \n ')只是去除字符串首尾的这些特定字符,但无法处理字符串中间的换行和空格,这也是处理后没效果的关键原因。
解决方案
下面两种方法都能实现预期效果:
方法1:使用split() + join()
利用split()自动分割任意空白字符(换行、空格等),再用单个空格连接分割后的部分,同时保留空字符串:
processed_data = [' '.join(info.split()) if info else '' for info in data]
方法2:使用正则表达式替换
用正则把所有连续的空白字符替换成单个空格,再去除首尾可能的空格:
import re processed_data = [re.sub(r'\s+', ' ', info).strip() if info else '' for info in data]
两种方法运行后,processed_data都会和你预期的目标列表一致。
内容的提问来源于stack exchange,提问作者genebean
相关产品推荐
相关产品推荐

