【发布时间】:2017-05-17 00:27:37
【问题描述】:
我有一个由列表组成的列表,用于创建一个矩阵,其中大部分填充零和其他一些类似这样的数字
a = [[0,0,0,1,0,0,0,0],
[3,0,0,2,1,0,0,0],
[3,0,0,0,0,1,0,0],
[3,5,0,4,0,0,0,0]]
我怎样才能创建一个接受该变量的函数,并找出对角线中是否有重复 3 次的数字?
例如它返回 True 因为 1。 我试图实现这样的功能:
def find_diagonal(matriz):
for x in range(len(matrix)):
for for a in range(len(x)):
if matriz[x][a] != 0:
encontrar = matriz[x][a]
if matriz[x+1][a-1] == encontrar:
if matriz[x+2][a-2] == encontrar:
return True
然后用其他对角线重复if matriz[x][a] != 0 之后的条件(这个寻找指向西南方向的)。
但是除了不是对每个示例都有效(有时它只有效一次,然后停止处理同一个示例),并且在边缘总是会引发索引错误,因为列表会检查顶部的行。
【问题讨论】:
-
你试过什么? Stack Overflow 不是代码编写服务,您需要提供 minimal reproducible example 来演示您尝试过的内容和发生的事情(以及您想要发生的事情)。作为旁注,由于扩展切片,通常更容易查看您视为 2D 的一维
list上的对角线。 -
如果你可以使用numpy,来查找数组中所有对角线的列表,你可以使用:
diags = [a[::-1,:].diagonal(i) for i in range(-a.shape[0]+1,a.shape[1])]diags.extend(a.diagonal(i) for i in range(a.shape[1]-1,-a.shape[0],-1))diagsList = [n.tolist() for n in diags]
标签: python list python-3.x function