Python是在嵌套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

我正在处理一个代码挑战,在这个挑战中,我必须尽可能减少执行时间,我能找到的唯一可以改进的地方是嵌套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 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
函数。