【发布时间】:2021-03-17 11:52:23
【问题描述】:
我有一个名为 Move 的类,它有一个名为 getNotation 的函数,用于以特定方式命名国际象棋中的移动。
class Move():
def __init__(self):
def getNotation(self):
return OutputString
我有一个列表类 validMoves,其中包含可以为给定 GameState 进行的所有可能的移动(列表的每个单独元素都是 Move 类的一个实例)。
validMoves=[]
现在我有一个程序,它通过查看打开的书返回移动,但该程序以 OutputString 的形式返回移动(这是 Move 类的 getNotation 函数中提到的)。让我们称之为bestMove。
我的移动功能:
def makeMove(move):
# makes the move on the board
在我的makeMove函数中,参数move只能是Move类的一个实例,函数才能工作。
所以我所做的是:
for move in validMoves :
if bestMove == move.getNotation():
makeMove(move)
但我想知道是否有任何其他方法可以使这项工作发挥作用,因为我的代码有很多 for 循环,我认为它增加了我的运行时间。
我想到的是,如果有什么方法可以根据函数修改列表的每个元素。就像我们可以通过应用 getNotation 而不使用 for 循环来修改 validMoves 列表中的每个元素,然后我们可以轻松检查
if bestMove in modifiedvalidMoves :
i = modifiedvalidMoves.index(bestMove)
makeMove(validMoves[i])
另一个问题如果这一切都是可能的,这是否会减少我的运行时间,因为我的看法是最小化代码中 for 循环的数量(当绝对没有必要时) 提高代码的速度。
【问题讨论】:
-
查看
map()和Pool.apply()docs.python.org/3.8/library/functions.html#map docs.python.org/3.8/library/…。另外,请记住,一旦找到移动,您可以break退出循环,您无需完成循环,这将节省大量迭代。我认为在这种情况下,map()可以正常工作。
标签: python performance for-loop chess