Python中每2个元素拆分列表的最优实现方法
问题
需求描述
给定列表:
original_list = ['tree', 'grass', 'banana', 'apple', 'fork', 'spoon', 'dog', 'cat']
需要将该列表按每2个元素为一组,每两组为一个单元,把第一个组放入list_1,第二个组放入list_2,最终得到:
list_1 = ['tree', 'grass', 'fork', 'spoon'] list_2 = ['banana', 'apple', 'dog', 'cat']
求最优实现方法。
最优实现方案
方法1:切片循环扩展(高效优先)
利用Python切片的底层优化特性,按4个元素为一个处理块拆分,每个块内前2个元素归list_1,后2个归list_2:
original_list = ['tree', 'grass', 'banana', 'apple', 'fork', 'spoon', 'dog', 'cat'] list_1 = [] list_2 = [] for i in range(0, len(original_list), 4): chunk = original_list[i:i+4] list_1.extend(chunk[:2]) list_2.extend(chunk[2:])
该方案执行效率最高,切片和extend都是Python内置的高效操作,同时逻辑直观,易于维护。
方法2:索引筛选推导式(简洁优先)
通过枚举元素索引,判断索引所属分组来筛选元素,代码更简洁:
original_list = ['tree', 'grass', 'banana', 'apple', 'fork', 'spoon', 'dog', 'cat'] list_1 = [item for idx, item in enumerate(original_list) if idx % 4 in (0, 1)] list_2 = [item for idx, item in enumerate(original_list) if idx % 4 in (2, 3)]
适合场景简单的情况,可读性较好,无需额外循环逻辑。
方法3:分块后分组(逻辑分层)
先将原列表拆分为每2个元素的子列表,再按奇偶位置提取合并:
original_list = ['tree', 'grass', 'banana', 'apple', 'fork', 'spoon', 'dog', 'cat'] # 拆分为每2个元素的子列表 chunks = [original_list[i:i+2] for i in range(0, len(original_list), 2)] # 合并目标列表 list_1 = [] for chunk in chunks[::2]: list_1.extend(chunk) list_2 = [] for chunk in chunks[1::2]: list_2.extend(chunk)
逻辑分层清晰,适合需要复用中间分块结果的场景。
方案对比
- 性能最优:方法1,切片和
extend的组合开销最小 - 代码最简洁:方法2,一行推导式完成筛选
- 逻辑最清晰:方法3,分步骤处理,易于扩展
内容的提问来源于stack exchange,提问作者Link
相关产品推荐
相关产品推荐

