Python 一个包含条件的for循环-尝试使其成为一行

Python 一个包含条件的for循环-尝试使其成为一行,python,Python,我试图让它成为一个单一的班轮,但做: for row,col in targets: if (board[row][col] == -1 and ((col != 0 and board[row][col - 1] != -1) or (col != len(board) - 1 and board[row][col + 1] != -1) or (row != 0 and board[row - 1][col] != -1) or (row != len(board) - 1 and

我试图让它成为一个单一的班轮,但做:

for row,col in targets:
    if (board[row][col] == -1 and ((col != 0 and board[row][col - 1] != -1) or (col != len(board) - 1 and board[row][col + 1] != -1) or (row != 0 and board[row - 1][col] != -1) or (row != len(board) - 1 and board[row + 1][col] != -1))): return 1000
return min(penalty)
但这不是同一件事。

你可以试试这个:

return [min(penalty), 1000][True in[(board[row][col] == -1 and ((col != 0 and board[row][col - 1] != -1) or (col != len(board) - 1 and board[row][col + 1] != -1) or (row != 0 and board[row - 1][col] != -1) or (row != len(board) - 1 and board[row + 1][col] != -1)) for row,col in targets)]]
这里,
condition()
是您的长期内在条件


但这将更难阅读,也不会比你已经拥有的更快

为什么你想把它改成一行?读起来非常难你应该把它改成更多的行,而不是更少的行。我知道它不太可读,但相信我,我有一个很好的理由在一行上做,我很高兴能得到一些帮助,因为我所有的尝试都失败了。然后告诉你的课程协调员自动分级机很糟糕,应该改进
return 1000 if any(condition(r, c) for r, c in targets) else min(penalty)