如何用itertools.groupby实现按索引规则分组元素为嵌套列表?
问题解答
itertools.groupby是否合适?
不合适。itertools.groupby的核心逻辑是按连续相同的键值分组,但你的分组规则是「从当前元素开始收集,直到遇到False对应的元素时结束当前分组(且包含该元素)」,两者逻辑不匹配。如果直接用groupby按indexer的True/False分组,会得到[['a','b'], ['c','d'], ['e','f']],和预期结果不符。
实现方案
可以通过遍历+维护当前分组的方式实现,逻辑清晰且符合需求:
data = ['a','b','c','d','e','f'] indexer = [True, True, False, False, True, True] result = [] current_group = [] for item, flag in zip(data, indexer): current_group.append(item) # 遇到False时,结束当前分组并重置 if not flag: result.append(current_group) current_group = [] # 处理最后一组(如果末尾是连续True的情况) if current_group: result.append(current_group) print(result) # 输出: [['a','b','c'], ['d'], ['e','f']]
逻辑说明
- 初始化结果列表
result和当前分组列表current_group。 - 遍历
data和indexer的配对元素:- 把当前元素加入
current_group。 - 如果当前元素对应的
indexer是False,就把current_group加入结果,然后重置current_group。
- 把当前元素加入
- 遍历结束后,如果
current_group还有元素(说明最后几个元素对应的indexer都是True),将其加入结果。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

