Python的方式我有0和的如的嵌套列表:檢查對角線嵌套列表
L = [[1, 0, 1],
[0, 0, 0],
[0, 0, 1]]
我要檢查是否有任何的有彼此成對角。只要子列表的長度等於整個列表的長度(這是一個正方形),嵌套列表的大小就可以是任意大小。所以如果我在上面的列表中運行它,它會返回False,因爲兩個是對角的。
我當前的代碼是:
for num, i in enumerate(List):
for count, m in enumerate(i):
key1 = True
key2 = True
key3 = True
key4 = True
num1 = num
num2 = num
num3 = num
num4 = num
count1 = count
count2 = count
count3 = count
count4 = count
if m == 1:
while key1 or key2 or key3 or key4:
#print(key1, key2, key3, key4)
try:
if List[num1 + 1][count1 + 1] == 1:
print(List[num1 + 1][count1 + 1])
return False
num1 += 1
count1 += 1
except IndexError:
key1 = False
try:
if List[num2 - 1][count2 + 1] == 1:
if num2 > 0:
print(List[num2 - 1][count2 + 1])
return False
num2 -= 1
count2 += 1
except IndexError:
key2 = False
try:
if List[num3 + 1][count3 - 1] == 1:
if count3 > 0:
print(List[num3 + 1][count3 - 1])
print(num3 + 1, count3 - 1)
return False
num3 += 1
count3 -= 1
except IndexError:
key3 = False
try:
if List[num4 - 1][count4 - 1] == 1:
if count4 > 0 and num4 > 0:
print(List[num4 - 1][count4 - 1])
return False
num4 -= 1
count4 -=1
except IndexError:
key4 = False
return True
代碼掃描列表1秒,而當發現一個,它看起來在其四角和搜索他們。它繼續搜索角落的方向,一次移動一個網格。如果找到另一個1,則返回false。一旦搜索到所有可能的對角網格(直到返回索引錯誤),代碼就會移到找到的下一個1。一旦搜索到每一個1並且沒有發現任何對角線,代碼就會返回true。
它感覺笨重和低效,但我不知道如何壓縮它。有沒有更簡單的方法來做到這一點?
對不起,我應該在問題中進一步澄清。我的意思是對角線和所有對角線一樣。在一個棋盤上畫一個主教,並把它移動到哪裏。對於列表中的每個個體1,我想分析與該對角線1對應的所有網格的集合。 – Primusa