如何编写无外部依赖的d维整数网格坐标元组生成函数
实现d维整数网格坐标集合生成函数
问题需求
编写函数intGrid(n, dim),接收两个参数:
n:每个维度上的域点数(要求n ≥ 1)dim:网格的维度数
函数需返回一个集合,包含该d维整数网格的所有坐标点元组。例如调用intGrid(n=2, dim=2)时,返回结果为{(0,0), (0,1), (1,0), (1,1)}。
限制:禁止使用numpy或其他第三方外部库,仅可使用Python内置功能/标准库。
解决方案1:利用标准库itertools.product
itertools.product可以直接生成多个可迭代对象的笛卡尔积,完美匹配d维网格的坐标生成逻辑——每个维度的取值范围是0到n-1,所有维度的组合就是网格的全部点。
import itertools def intGrid(n, dim): # 构造每个维度的取值范围列表 axis_ranges = [range(n)] * dim # 生成笛卡尔积并转换为集合返回 return set(itertools.product(*axis_ranges))
解决方案2:手动递归实现(无额外库依赖)
如果不想依赖itertools,可以通过递归逐步构建高维度网格:从1维网格出发,d维网格的每个点都是d-1维网格的点拼接一个新维度的取值。
def intGrid(n, dim): # 处理1维的基础情况 if dim == 1: return {(num,) for num in range(n)} # 递归获取低一维的网格集合 lower_dim_points = intGrid(n, dim - 1) # 扩展每个低维点,添加新维度的所有可能值 full_grid = set() for point in lower_dim_points: for val in range(n): full_grid.add(point + (val,)) return full_grid
测试验证
调用示例:
print(intGrid(n=2, dim=2)) # 输出:{(0, 0), (0, 1), (1, 0), (1, 1)} print(intGrid(n=1, dim=3)) # 输出:{(0, 0, 0)}
两种方案均能正确处理所有合法输入,满足需求。
内容的提问来源于stack exchange,提问作者John Black
相关产品推荐
相关产品推荐

