在给定列表列表的情况下,以对角方式打印行的最快方法:

时间:2014-08-28 19:29:26

标签: python algorithm

当我遇到这个问题时,我正在接受采访。

给出一个列表,这些列表看起来像一个矩阵:

1 2 3
4 5 6
7 8 9

输出应为

1 4 2 7 5 3 8 6 9

基本上,给定Python中的列表列表,对角线打印行。什么是最pythonic方式来实现这一目标?我已经查看了一些C代码和for循环但是有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

>>> a = numpy.array([[1,2,3],[4,5,6],[7,8,9]])
>>> reduce(operator.add,(list(a[::-1].diagonal(i)) for i in range(-len(a),len(a)
)))
[1, 4, 2, 7, 5, 3, 8, 6, 9]

可能会更快......(怀疑它......但它的冷却器:P)