Python 从函数创建多维数组/列表

Python 从函数创建多维数组/列表,python,arrays,python-3.x,multidimensional-array,Python,Arrays,Python 3.x,Multidimensional Array,我有一个函数f([I_0,I_1,…,I_k-1]),它将k维整数数组作为输入,并返回一些对象 给定每个索引的范围(作为二维数组ranges=[i_0_range,i_1_range,…]),如何生成一个k维列表/数组,其中包含为每个索引值计算的对象 如果k是固定的,我只需要执行k嵌套循环。但我希望有一个适用于任何k的解决方案。如何在Python中实现这一点?您可以使用它从范围生成所有不同的索引组合。然后可以迭代该迭代器生成的元组,为每个元组调用f。例如,若定义了f以返回输入索引字符串: imp

我有一个函数
f([I_0,I_1,…,I_k-1])
,它将
k
维整数数组作为输入,并返回一些对象

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

如果
k
是固定的,我只需要执行
k
嵌套循环。但我希望有一个适用于任何
k
的解决方案。如何在Python中实现这一点?

您可以使用它从范围生成所有不同的索引组合。然后可以迭代该迭代器生成的元组,为每个元组调用
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))

您尝试了什么?结果如何?你期待什么?如果你说你有一个函数,请分享代码。我不知道该尝试什么:(我正在考虑某种递归/动态解决方案。请注意,函数的特定形式与我的问题无关。非常感谢!!似乎完成了这项工作。你能详细说明一下
itertools.product(*ranges)是什么吗
有,以及为什么您使用
[*t]
参数调用
f
(抱歉,显然我不熟悉这些Python基础知识。)
*ranges
ranges
数组展平,这样每个元素分别传递给
itertools.product
,然后它创建每个范围的笛卡尔积。注意,我将itertools.product(*ranges)中t的代码更改为
f(list(t))
以便正确处理大于2的
k
;itertools.product返回一个值元组(对于
i\u 0,i\u 1,…,i\u k
),
list(t)
然后将其转换为问题中所述的列表。根据您对
f
的实现,可能不需要转换为列表,您可以使用
f(t)