在q/kdb+中如何按指定分组数量将列表拆分为嵌套列表?
按指定分组长度拆分列表的常规实现方法
下面是Python里处理这类需求的几种常用方案,都是工程场景里的常规写法:
1. 指针+切片(基础直观写法)
用一个起始指针跟踪当前分组的起始位置,遍历分组长度列表,每次截取对应长度的切片后更新指针位置。这种写法逻辑清晰,不需要依赖额外库,新手也能快速理解。
rowsOfDataIndexes = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] countOfIndexPairs = [9, 7] grouped_list = [] current_start = 0 for group_length in countOfIndexPairs: current_end = current_start + group_length grouped_list.append(rowsOfDataIndexes[current_start:current_end]) current_start = current_end print(grouped_list) # 输出: [[0, 1, 2, 3, 4, 5, 6, 7, 8], [9, 10, 11, 12, 13, 14, 15]]
2. 迭代器+islice(高效写法)
利用迭代器的特性,结合itertools.islice按需截取元素,这种写法在处理超大列表时内存效率更高——不会一次性生成所有切片的副本,而是逐个从迭代器里取对应数量的元素。
from itertools import islice rowsOfDataIndexes = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] countOfIndexPairs = [9, 7] index_iterator = iter(rowsOfDataIndexes) grouped_list = [list(islice(index_iterator, length)) for length in countOfIndexPairs] print(grouped_list)
边界情况说明
如果原列表总长度和分组长度列表的总和不匹配:
- 两种写法都会自动适配:最后一个分组会取到原列表的末尾(比如原列表只有15个元素,分组长度是[9,8],第二组只会得到7个元素)
- 若迭代器里无剩余元素,islice会返回空列表,不会触发报错
内容的提问来源于stack exchange,提问作者bashprofile84
相关产品推荐
相关产品推荐

