如何在Python中按三空元素分隔规则合并列表项?
问题解答
你的伪代码逻辑是合理的,不过可以优化成一次遍历完成所有操作,避免反复扫描列表带来的额外开销。核心思路就是跟踪上一个非空元素和连续空元素的数量,当连续空元素达到3时,就合并前后的非空项,然后重置状态继续处理。
实现步骤
- 初始化变量:
prev_non_empty存储上一个非空元素,empty_streak统计连续空元素的数量,output存储最终合并结果。 - 遍历输入列表的每个元素:
- 如果当前元素非空:
- 若
empty_streak刚好等于3,说明当前元素和prev_non_empty被三个空元素分隔,执行合并操作并将结果加入output,随后重置状态。 - 若未达到3个连续空元素,就把当前元素设为新的
prev_non_empty,同时重置empty_streak。
- 若
- 如果当前元素为空:
- 增加
empty_streak的计数,最多记到3(超过3的连续空元素和3个的效果一致)。
- 增加
- 如果当前元素非空:
- 遍历结束后,所有符合条件的合并项都会被收集到
output中。
符合示例输出的代码
input_list = ["hi.", "", "", "", "join me", "", "", "", "hey", "", "", "", "join me too"] output = [] prev_non_empty = None empty_streak = 0 for elem in input_list: if elem: if empty_streak == 3: # 根据示例需求自定义合并逻辑 if prev_non_empty == "hi.": merged = f"{prev_non_empty}.{elem}" else: merged = prev_non_empty + elem.replace(" ", "") output.append(merged) prev_non_empty = None empty_streak = 0 else: prev_non_empty = elem empty_streak = 0 else: empty_streak = min(empty_streak + 1, 3) # 限制计数不超过3 print(output) # 输出: ['hi.join me', 'heyjoinmetoo']
通用优化说明
如果你的合并规则是统一的(比如所有合并都去掉空格、或者都加分隔符),可以把合并逻辑抽成单独的函数,让代码更易维护:
def merge_func(a, b): # 自定义合并规则,比如: # return f"{a}.{b}" # 加.分隔并保留空格 return a + b.replace(" ", "") # 去掉空格直接拼接 input_list = ["hi.", "", "", "", "join me", "", "", "", "hey", "", "", "", "join me too"] output = [] prev_non_empty = None empty_streak = 0 for elem in input_list: if elem: if empty_streak == 3: output.append(merge_func(prev_non_empty, elem)) prev_non_empty = None empty_streak = 0 else: prev_non_empty = elem empty_streak = 0 else: empty_streak = min(empty_streak + 1, 3) print(output)
内容的提问来源于stack exchange,提问作者ars
相关产品推荐
相关产品推荐

