从另一个lis创建索引/坐标矩阵

2024-05-13 10:49:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我很抱歉,如果类似的问题已经得到了回答,但我广泛地调查,并没有找到解决办法。我对毕顿人比较陌生。在

我正在尝试创建一个索引/坐标矩阵,所有可能的列表都是二维的(一组不同大小的子列表,一个列表),以便处理所有可能的元素组合。在

如果我的列表是[[A, B, C]],那么要创建的矩阵是[[0], [1], [2]],其中每个列表的第一个也是唯一一个元素引用子列表在列表中的位置。 如果我的列表是[[A, B, C], [A, B, C, D]],则矩阵应产生:

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

等等。每个子列表的长度等于原始列表中子列表的数量。起始列表的内容无关紧要,但顺序是,因为在结果中,每个子列表的位置0代表子列表0中元素的坐标,等等。在

基本上,这表示子列表中元素的所有组合,类似于笛卡尔积。在

我想这可以通过某种列表理解来完成,但是找不到答案。在


Tags: 答案元素内容列表数量顺序代表矩阵
1条回答
网友
1楼 · 发布于 2024-05-13 10:49:02

您正在寻找^{}

>>> import itertools
>>> lists = [['A', 'B', 'C'], ['A', 'B', 'C', 'D']]
>>> list(itertools.product(*lists))
[('A', 'A'), ('A', 'B'), ('A', 'C'), ('A', 'D'),
 ('B', 'A'), ('B', 'B'), ('B', 'C'), ('B', 'D'),
 ('C', 'A'), ('C', 'B'), ('C', 'C'), ('C', 'D')]

或者更确切地说,是索引的乘积,所以只需使用适当大小的ranges,而不是原始列表。在

^{pr2}$

相关问题 更多 >