python - 从函数创建多维数组/列表
问题描述
我有一个函数f([i_0, i_1, ..., i_k-1])
,它将一个k
整数维数组作为输入并返回一些对象。
给定每个索引的范围(作为二维数组ranges=[i_0_range, i_1_range, ...]
),如何生成一个k
包含为每个索引值评估的对象的维列表/数组?
如果k
是固定的,我会简单地做k
嵌套循环。但我希望有一个适用于任何k
. 我怎样才能在 Python 中做到这一点?
解决方案
您可以使用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))
。
推荐阅读
- javascript - 使用 puppeteer 获取元素和文本列表
- python - 没有名为错误的模块。如何从不同目录的 python 中的 .pyx 文件导入函数?
- jquery-ui - Jquery Autocomplete 错误 menuselect 和 menufocus 无法读取未定义的属性值
- ios - iOS 使用 Agora 语音通话加入和离开频道时状态栏显示为红色
- php - 在php中进行求和时如何处理空值
- python - Runtime.ImportModuleError:无法导入模块“lambda_function”:没有名为“httplib2”的模块
- laravel - 如何在laravel中显示具有yajra数据表多对多关系的数据?
- hadoop - 为什么 cloudera 5.12 vm 中的默认复制因子为 1,而在以前的版本中为 3?
- swift - 向现有项目添加共享扩展。所以已经存在的项目 pod 开始出现错误
- python - 如何将字体标签设置为 Helvetica 并使用 matplotlib 重新设计轴标签文本