簡體   English   中英

避免在python列表中重復

[英]Avoiding duplication in a python list

我試圖為國際象棋游戲整理一些邏輯,並努力確保不會在同一方塊上放置多個棋子。 目前,我的代碼如下,但是我不確定它在哪里不起作用。

def add(self, pawn, x_coordinate, y_coordinate, piece_color):
        for each_pawn in self.pawns:
            if each_pawn.x_coordinate == x_coordinate and each_pawn.y_coordinate == y_coordinate:
                pawn.x_coordinate = -1
                pawn.y_coordinate = -1
            else:
                pawn.x_coordinate = x_coordinate
                pawn.y_coordinate = y_coordinate

        self.pawns.append(pawn)

典當在類的頂部設置為空列表。 這個想法是,我要創建的棋子進入列表,然后在創建任何后續棋子時檢查它們是否具有相同的坐標,如果確實放置,則將其放置在-1,-1正方形內,即不在板上。 我敢肯定它不是特別優雅,但是我是Python的新手,希望當我有一些基礎知識工作時再回來重構。 謝謝你的幫助!

在循環的末尾, pawn的坐標將對應於對其進行測試的最后一個pawn的結果。 pawn.y_coordinate = -1之后添加break語句。

class Pawn:
    def __init(x, y):
        self.x_coordinate = x
        self.y_coordinate = y

    @property
    def x_coordinate(self):
        return self.x_coordinate

    @x_coordinate.setter
    def x_corrdinate(x):
        self.x_coordinate = x    

    @property
    def y_coordinate(self):
        return self.y_coordinate

    @y_coordinate.setter
    def y_corrdinate(y):
        self.y_coordinate = y

    def __hash__(self):
        return hash(self.x_coordinate) ^ hash(self.y_coordinate)

    def __eq__(self, other):
        return self.x_coordinate == other. x_coordinate and self.x_coordinate == other.y_coordinate

基本上,寫一個類兵其具有x和y坐標,重寫__eq__()方法和__hash__()它們將在檢查中使用if pawn not in pawns:所述__eq__()是用來驗證2兵實例是相等的或不根據它們的x和y坐標。

如何使用?

pawn = Pawn(-1, -1)
if pawn not in pawns:
    pawns.append(pawn)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM