python - 从另一个列表创建索引/坐标矩阵

标签 python list matrix coordinates

如果与此类似的问题已经得到解答,我很抱歉,但我进行了广泛的查找,但没有找到解决方案。我对 Pyhton 比较陌生。

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

如果我的列表是 [[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中元素的坐标,等等。

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

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

最佳答案

您正在寻找itertools.product :

>>> 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 而不是原始列表。

>>> list(itertools.product(*(range(len(x)) for x in lists)))
[(0, 0), (0, 1), (0, 2), (0, 3),
 (1, 0), (1, 1), (1, 2), (1, 3),
 (2, 0), (2, 1), (2, 2), (2, 3)]

关于python - 从另一个列表创建索引/坐标矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27488252/

相关文章:

python - 如何解析 Chrome 书签文件中的 date_added 字段?

python - 使 isort 将来自 Django 应用程序的导入识别为第一方导入

python - 调整 cv2.VideoCapture 的帧大小

list - 在 Haskell 中将内部列表切割成相等的长度

r - 向量的动态矩阵

python - 如何从 Python 中的文本文件导入矩阵

python - 在python中查找字典

python - 如何在列表中的字典字符串中搜索单词?

Java CodingBat 数组列表

haskell - 计算 GF(2) 中 rref 的算法?