Python如何基于指定分隔值将列表拆分为不含分隔符的子列表
解决方案
最优雅的实现方式是使用Python标准库itertools.groupby,仅需一次隐式遍历即可完成拆分,无需编写多层循环:
from itertools import groupby # 原始列表 original_list = ['#main', '89631139', '22804410', '38517737', '#extra', '43228023', '56532353', '!side', '22804410', '45467446', '31801517', '63767246'] # 定义分隔符集合 separators = {'#main', '#extra', '!side'} # 核心拆分逻辑:按是否为分隔符分组,过滤掉分隔符组后直接赋值给对应变量 main, extra, side = [list(group) for is_sep, group in groupby(original_list, key=lambda x: x in separators) if not is_sep]
运行后变量值完全符合预期:
print(main) # ['89631139', '22804410', '38517737'] print(extra) # ['43228023', '56532353'] print(side) # ['22804410', '45467446', '31801517', '63767246']
方案优势
- 时间复杂度为O(n),和手动循环效率一致,没有额外性能损耗
- 代码简洁,仅需一行核心逻辑即可完成拆分
- 扩展性强,新增分隔符只需更新
separators集合和对应接收变量即可
如果需要不依赖分隔符出现顺序的更灵活映射,可以使用仅单次循环的实现:
separator_map = {'#main': 'main', '#extra': 'extra', '!side': 'side'} result = {} current_tag = None for item in original_list: if item in separator_map: current_tag = separator_map[item] result[current_tag] = [] elif current_tag: result[current_tag].append(item) # 使用方式:result['main']、result['extra']、result['side']
内容的提问来源于stack exchange,提问作者dnmxm
相关产品推荐
相关产品推荐

