【问题标题】:Formatting every element in a list based on some function in python根据python中的某些函数格式化列表中的每个元素
【发布时间】: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 循环的数量(当绝对没有必要时) 提高代码的速度。

【问题讨论】:

标签: python performance for-loop chess


【解决方案1】:

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

创建一个迭代器,使用每个参数计算函数 的迭代。当最短的迭代用完时停止。

result = map(makeMove, validMoves)

将在结果中返回一个迭代器,其中包含 validMoves 的每个值,并应用了函数 makeMove

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      相关资源
      最近更新 更多