'Pythonic'确保矩阵元素长度的方法

时间:2012-09-06 02:40:33

标签: python idioms

给出列表清单:

>>> n=4
>>> LoL=[range(n) for i in range(n)]
>>> LoL
[[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]

它是否易于理解,可以理解, Pythonic 甚至以这种方式确保N x N矩阵:

>>> len(LoL) == n and {len(l) for l in LoL} == {n}
True

因此可以使用它:

if len(matrix) != 4 or {len(l) for l in matrix} != {4}:
        raise ValueError

是否有更好的替代习语或这是可以理解的?

1 个答案:

答案 0 :(得分:0)

正如您的评论所述,尝试/除可能更好。

您不仅会抓住并尝试使用4x4尺寸以外的元素,而且还会捕获传递给您的错误尺寸:

>>> LoL=[1,2,3,4]
>>> len(LoL) == n and {len(l) for l in LoL} == {n}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <setcomp>
TypeError: object of type 'int' has no len()

如果您对要使用的数据有疑问,请与我们联系:

>>> try: 
...    i=LoL[2][2]
... except IndexError:
...    print 'no bueno...'
... 
no bueno...