1

矩阵

是具有相同长度的列表的列表。我必须返回表格的字典

{i:(l1[i],l2[i],...,lm[i])}

其中键 i 与每个列表中第 i 个元素的元组匹配。说

matrix=[[1,2,3,4],[9,8,7,6],[4,8,2,6]]

所以这一行:

>>> dict([(i,tuple(matrix[k][i] for k in xrange(len(matrix)))) for i in xrange(len(matrix[0]))])

做得很好并输出:

{0: (1, 9, 4), 1: (2, 8, 8), 2: (3, 7, 2), 3: (4, 6, 6)}

但如果矩阵为空则失败:matrix=[]. 输出应该是:{}

我该如何处理?

4

3 回答 3

5

这个怎么样:

>>> matrix = [[1,2,3,4],[9,8,7,6],[4,8,2,6]]
>>> dict(enumerate(zip(*matrix)))
{0: (1, 5, 4), 3: (4, 8, 6), 2: (3, 7, 2), 1: (2, 6, 8)}    
>>> matrix = []
>>> dict(enumerate(zip(*matrix)))
{}
于 2012-06-01T22:36:03.990 回答
4

尝试更改部分“len(matrix[0])” 如果矩阵为空,这将尝试查找不存在的索引。

而是让它

len(matrix[0]) if matrix else 0

于 2012-06-01T22:38:23.287 回答
0

如果您想要一个简单的解决方案(而不是知道您的解决方案出了什么问题),我建议您使用列表而不是字典。就其大小和键而言,将其视为矩阵是相当静态的。

这可以简单地通过zip(*matrix)

>>> matrix = [[1,2,3,4],[9,8,7,6],[4,8,2,6]]
>>> dict_ = dict(enumerate(zip(*matrix)))
>>> list_ = zip(*matrix)
>>> for key_ in dict_:
...     print dict_[key_] == list_[key_]
...
True
True
True
True
于 2012-06-02T03:37:26.143 回答