gpt4 book ai didi

检查嵌套列表中对角线的 Pythonic 方法

转载 作者:太空宇宙 更新时间:2023-11-04 07:57:28 25 4
gpt4 key购买 nike

我有一个 0 和 1 的嵌套列表,例如:

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。

感觉笨重且效率低下,但我不确定如何压缩它。有更短的方法吗?

最佳答案

您可以像这样访问对角线:

L = [[1, 0, 1],
[0, 0, 0],
[0, 0, 1]]

diag1 = [L[i][i] for i in range(len(L))]
diag2 = [L[i][len(L[0])-i-1] for i in range(len(L))]
if diag1 == diag2:
pass #do something here

关于检查嵌套列表中对角线的 Pythonic 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46355141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com