如何基于单个1D列表生成包含所有两两元组的2D数组?
Python实现1D列表生成全配对元组2D数组的最优方案
方法1:原生列表推导(最简洁,小数据量效率最高)
不需要引入任何第三方依赖,一行代码即可实现,可读性极强:
list1 = [1,2,3] output = [[(i, j) for j in list1] for i in list1]
外层循环遍历list1的每个元素作为元组的第一个值,内层循环遍历list1所有元素作为元组的第二个值,生成的结构完全匹配示例要求,长度在万级以下的列表用该方案完全够用。
方法2:Numpy向量化实现(大数据量效率最优)
如果原始列表长度很大(十万级及以上),用numpy的向量化操作会比纯Python循环快1~2个数量级,能大幅降低运算耗时:
import numpy as np list1 = [1,2,3] arr = np.array(list1) # 生成笛卡尔积后reshape为目标结构 output = np.stack(np.meshgrid(arr, arr), axis=-1).reshape(len(arr), len(arr), 2).tolist() # 若不需要转成Python原生列表,直接保留numpy数组格式效率会更高
方案选型参考
- 小数据量(列表长度<10000):优先选列表推导方案,无额外依赖、代码简洁、速度满足需求
- 大数据量(列表长度>=10000):优先选numpy方案,向量化运算规避了Python循环的性能损耗,执行效率更高
内容的提问来源于stack exchange,提问作者Reison
相关产品推荐
相关产品推荐

