Python是在嵌套for循环中编写嵌套if-else的有效方法
我正在处理一个代码挑战,在这个挑战中,我必须尽可能减少执行时间,我能找到的唯一可以改进的地方是嵌套for循环中的嵌套if else语句,但我不确定如何改进它 这是我的密码:Python是在嵌套for循环中编写嵌套if-else的有效方法,python,python-3.x,for-loop,Python,Python 3.x,For Loop,我正在处理一个代码挑战,在这个挑战中,我必须尽可能减少执行时间,我能找到的唯一可以改进的地方是嵌套for循环中的嵌套if else语句,但我不确定如何改进它 这是我的密码: mat = [[0] * n] * n count = 0 for i in range(n,0,-1): count += 1 for j in range(i,n+1,1): if i == j: pass else: if
mat = [[0] * n] * n
count = 0
for i in range(n,0,-1):
count += 1
for j in range(i,n+1,1):
if i == j:
pass
else:
if getEnemyStatus(mat, i, j):
break
else:
if isEnemy(enemyDict, i, j):
setStatus(mat, i, j)
break
else:
count += 1
n
的值可以是1到10^5
如果
条件
,您可以在范围
中以i+1开始,跳过第一个
for j in range(i+1, n+1, 1):
# code here
其次,为了便于阅读,应使用elif
避免嵌套if-else
条件
更新代码应类似于:
mat = [[0] * n] * n
count = 0
for i in range(n,0,-1):
count += 1
for j in range(i + 1, n + 1, 1):
if getEnemyStatus(mat, i, j):
break
elif isEnemy(enemyDict, i, j):
setStatus(mat, i, j)
break
else:
count += 1
注意:如果您可以在isEnemy函数中设置状态setStatus
,则可以获得更清晰的代码:
mat = [[0] * n] * n
count = 0
for i in range(n,0,-1):
count += 1
for j in range(i + 1, n + 1, 1):
if getEnemyStatus(mat, i, j) or isEnemy(enemyDict, i, j):
break
count += 1
如果
条件
,您可以在范围
中以i+1开始,跳过第一个
for j in range(i+1, n+1, 1):
# code here
其次,为了便于阅读,应使用elif
避免嵌套if-else
条件
更新代码应类似于:
mat = [[0] * n] * n
count = 0
for i in range(n,0,-1):
count += 1
for j in range(i + 1, n + 1, 1):
if getEnemyStatus(mat, i, j):
break
elif isEnemy(enemyDict, i, j):
setStatus(mat, i, j)
break
else:
count += 1
注意:如果您可以在isEnemy函数中设置状态setStatus
,则可以获得更清晰的代码:
mat = [[0] * n] * n
count = 0
for i in range(n,0,-1):
count += 1
for j in range(i + 1, n + 1, 1):
if getEnemyStatus(mat, i, j) or isEnemy(enemyDict, i, j):
break
count += 1
你能出示完整的密码吗?好的。这部分代码帮不了你…你怎么知道这是唯一可以优化的东西?什么是敌人和地位功能?你能优化它们吗?什么是mat?您可以跳过第一个if
条件,从范围中的i+1
开始。您应该真正提供一个-也许在解决性能问题之前,您应该首先启动并运行代码(有意义)。至少我怀疑mat=[[0]*n]*n
是否符合您的要求,因为它创建了一个列表副本列表,如果您更改,例如m[0][1]
所有m[n][1]
都将相应更改。或者这是故意的,你知道并测试过吗?你能展示完整的代码吗?好的。这部分代码帮不了你…你怎么知道这是唯一可以优化的东西?什么是敌人和地位功能?你能优化它们吗?什么是mat?您可以跳过第一个if
条件,从范围中的i+1
开始。您应该真正提供一个-也许在解决性能问题之前,您应该首先启动并运行代码(有意义)。至少我怀疑mat=[[0]*n]*n
是否符合您的要求,因为它创建了一个列表副本列表,如果您更改,例如m[0][1]
所有m[n][1]
都将相应更改。或者这是故意的,你知道并测试过吗?@AbdulRehman对于这个特定代码的回答是肯定的,现在只有一个if
条件将是签入For
循环以中断内部循环。其他性能现在取决于getEnemyStatus
和isEnemy
函数。@AbdulRehman对于这个特定代码的回答是肯定的,现在只有一个if
条件将签入For
循环以中断内部循环。其他性能现在取决于getEnemyStatus
和isEnemy
函数。