如何高效生成每组重复5次的整数列表以实现数据集索引?
高效生成重复整数索引列表的方案
这问题我之前处理数据集时也碰到过,一个个拼接小列表的方式确实效率极低,尤其是数据量再往上走的时候完全不实用。给你几个Python环境下的高效方案,按需选择:
1. 纯Python列表推导式(简洁高效,无依赖)
这是最直接的纯Python实现,底层用C优化过,比手动循环拼接快得多。核心思路是先确定需要的基础数字范围(90个元素÷每个数重复5次=18个数字,从1到18),然后对每个数字生成5次重复再展开:
index_list = [num for num in range(1, 19) for _ in range(5)]
2. itertools工具链(内存友好,适合超大数据量)
如果你的数据集后续可能扩展到非常大的规模,用迭代器的方式可以避免一次性占用大量内存。借助itertools.repeat生成每个数字的重复迭代器,再用chain把它们串联起来:
from itertools import repeat, chain index_list = list(chain.from_iterable(repeat(num, 5) for num in range(1, 19)))
这种方式不会提前生成完整的列表,而是按需生成元素,内存占用会小很多。
3. Numpy向量化操作(适合数值型数据集,速度拉满)
如果你的索引后续要和数值型数据集配合使用(比如Pandas、Numpy数组),用Numpy的向量化操作是最优解,速度比纯Python快几个数量级:
import numpy as np index_array = np.repeat(np.arange(1, 19), 5) # 如果需要转成普通列表的话 index_list = index_array.tolist()
Numpy的repeat函数会直接在底层做向量化重复,不需要Python层面的循环,效率极高。
内容的提问来源于stack exchange,提问作者Anh duong Le
相关产品推荐
相关产品推荐

