I am trying to make a chess engine without use of the python chess libraries, so I can learn more about chess programming. Have generated a set of pseudo legal moves (- castling and en passant) and have made a function to generate only the legal moves from the list. my code for this function is here: def generateLegalMoves(currentPos, colourToMove): kingNumber = 1 if colourToMove == "b" else 9 opponentColour = "w" if colourToMove == "b" else "b" legalMoves = [] myKingSquare = currentPos.index(kingNumber) pseudoLegalList = GeneratePsuedoLegalMoves(currentPos, colourToMove) for pseudoMove in pseudoLegalList: newPos = makeMove(currentPos, pseudoMove[0], pseudoMove[1]) newPosPsuedoLegalMoves = GeneratePsuedoLegalMoves(newPos, opponentColour) isLegal = True for j in newPosPsuedoLegalMoves: if j[1] == myKingSquare: isLegal = False if isLegal: legalMoves.append(pseudoMove) return legalMoves How can I code a more efficient version? Continue reading...