gpt4 book ai didi

python - 如果 python 中的 block 未使用 True 语句执行

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

我刚开始用小脚本学习 python。我遇到了一个测验,如果第一行与第一列相同,则确定列表是对称的,第二行与第二列相同,依此类推。

def symmetric(block):
n = len(block)
i = 0
for i in range(n-1):
j = 0
for j in range(n-1):
if (block[i][j] != block[j][i]):
return False
j +=1
i +=1
return True

结果

print symmetric([["cat", "dog", "fish"],
["dog", "dog", "dog"],
["fish","fish","cat"]])

应该是假的。

但是,此代码始终返回 True,在调试器中我可以看到 block[i][j] != block[j][i] 返回 True 但 if block 未执行。比较有什么问题或 if block 的组成不正确吗?

最佳答案

失败的主要原因是因为你应该写range(n)而不是 range(n-1) (上限是独占的)。喜欢:

def symmetric(block):
n = len(block)
for i in range(<b>n</b>):
for j in range(<b>n</b>):
if block[i][j] != block[j][i]:
return False
return True

不过,这个函数有几个奇怪的地方:

  • 你初始化i = 0j = 0 .这不是必需的:在 Python 中,for循环将为您声明变量;
  • 您对 i 执行递增/递减和 j ,这又是没有必要的。 for循环枚举迭代器/生成器并将每个值分配给 ij ;
  • 通常不为if写括号声明。

此外,您实际上可以使用带有 all(..) 的两行代码使这段代码更优雅。内置函数:

def symmetric(block):
n = len(block)
return <b>all(block[i][j] == block[j][i] for i in range(n) for j in range(n))</b>

这是一种更声明式和更显式的代码编写风格。因为这里的代码几乎是不言自明的:“是否返回 block[i][j] == block[j][i] 中的 irange(n) 中的 j 的所有 range(n)

终于赞@Błotosmętek在他们的评论中说,你不必检查 block[2][0] == block[0][2]如果你已经检查了 block[0][2] == block[2][0] .所以你可以通过写来提高性能(大约一半):

def symmetric(block):
n = len(block)
return all(block[i][j] == block[j][i] for i in range(n) for j in range(<b>i</b>))

关于python - 如果 python 中的 block 未使用 True 语句执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44518042/

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