根据 python 中的某个函数格式化列表中的每个元素

Formatting every element in a list based on some function in python

我有一个名为 Move 的 class,它有一个名为 getNotation 的函数,用于以特定方式命名国际象棋中的一个动作。

class Move(): 
    def __init__(self):
        def getNotation(self):
            return OutputString

我有一个列表 class validMoves,其中包含可以针对给定 GameState 进行的所有可能移动(列表中的每个单独元素都是 class 移动的一个实例)。

validMoves=[]

现在我有一个程序 returns 我通过查看开篇书来移动但是那个程序 returns 以 OutputString 的形式移动(这是在 getNotation 函数中提到的移动 class)。让我们称之为 bestMove.

我的移动函数:

def makeMove(move):    
    # makes the move on the board

在我的 makeMove 函数中,参数 move 只能是 class 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 循环的数量(当绝对没有必要时) 提高代码速度。

我建议使用 namedtuple 这使您可以按位置或即访问每个元素。

您可以考虑使用内置函数中的 map class。

Make an iterator that computes the function using arguments from each of the iterables. Stops when the shortest iterable is exhausted.

result = map(makeMove, validMoves)

会 return 产生一个包含 validMoves 的每个值并应用函数 makeMove 的迭代器。