如何依据字符串s1的空格分隔布局格式化字符串s2
按指定空格格式重新分配字符串内容
给定两个字符串:
s1 = "123 456 789 012 1234" s2 = "1234567"
需要参照s1的空格分布格式,将s2的字符填充进去,最终得到输出:
Output = "123 456 7"
解决思路
核心是先解析s1的结构:拆分出所有非空格段的长度,以及段与段之间的空格数量,之后按这个结构依次从s2中取对应长度的字符,拼接上间隔空格,直到s2的字符耗尽。
代码实现
def format_by_space_pattern(s1, s2): # 解析s1的非空格段长度和段间空格数 segment_lengths = [] space_intervals = [] current_seg_len = 0 current_space_len = 0 in_space = False for char in s1: if char == ' ': in_space = True current_space_len += 1 else: if in_space: space_intervals.append(current_space_len) current_space_len = 0 in_space = False current_seg_len += 1 # 记录最后一个非空格段的长度 if current_seg_len > 0: segment_lengths.append(current_seg_len) # 按格式拼接s2的内容 result = [] s2_idx = 0 s2_total = len(s2) for i in range(len(segment_lengths)): # 计算当前能取的字符长度,不超过s2剩余字符数 take = min(segment_lengths[i], s2_total - s2_idx) if take <= 0: break # 添加当前段的字符 result.append(s2[s2_idx:s2_idx+take]) s2_idx += take # 如果还有间隔空格且s2还有剩余字符,添加空格 if i < len(space_intervals) and s2_idx < s2_total: result.append(' ' * space_intervals[i]) return ''.join(result) # 测试示例 s1 = "123 456 789 012 1234" s2 = "1234567" output = format_by_space_pattern(s1, s2) print(f'Output = "{output}"')
代码说明
- 遍历s1时,分别统计每个非空格段的长度,以及段之间的空格数量,得到
segment_lengths(各段字符数)和space_intervals(段间空格数)两个列表。 - 遍历
segment_lengths,每次从s2中取对应长度的字符(如果s2剩余字符不足,就取剩下的所有),拼接到结果里。 - 每添加完一个段后,如果还有对应的间隔空格,且s2还有剩余字符,就把空格也拼进去。
- 直到s2的字符全部用完,停止拼接,得到最终结果。
内容的提问来源于stack exchange,提问作者jp rathore
相关产品推荐
相关产品推荐

