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)