首页 > 解决方案 > 从函数创建多维数组/列表

问题描述

我有一个函数f([i_0, i_1, ..., i_k-1]),它将一个k整数维数组作为输入并返回一些对象。

给定每个索引的范围(作为二维数组ranges=[i_0_range, i_1_range, ...]),如何生成一个k包含为每个索引值评估的对象的维列表/数组?

如果k是固定的,我会简单地做k嵌套循环。但我希望有一个适用于任何k. 我怎样才能在 Python 中做到这一点?

标签: pythonarrayspython-3.xmultidimensional-array

解决方案


您可以使用itertools.product从范围中生成所有不同的索引组合。然后,您可以遍历该迭代器生成的元组,调用f每个元组。例如,如果f定义为返回输入索引的字符串:

import itertools

def f(indexes):
    return ','.join(map(str, indexes))
    
ranges = [range(0, 2), range(1, 3), range(2, 4)]

objs = [f(list(t)) for t in itertools.product(*ranges)]
print(objs)

输出:

['0,1,2', '0,1,3', '0,2,2', '0,2,3', '1,1,2', '1,1,3', '1,2,2', '1,2,3']

请注意,根据您的实现f,可能不需要将返回的元组从转换itertools.product为列表,您可以只使用f(t)而不是f(list(t))


推荐阅读