私のコードは次のとおりです。
self.newMonsterList =[]
myKeys = []
if (len(self.myList)>0):
for i in range(len(self.myList)-1):
myVar = self.myList[i]
myKeys.append(myVar[1])
lis = game.active_entities.keys()
for k in lis:
if (k not in myKeys):
game.active_entities[k].destroy()
for it in self.myList:
if (it[1] in lis):
self.setEnt(it, game.active_entities[it[1]])
else:
self.newMonsterList.append(it)
self.makeEnt()
このコードは、それが含まれているメソッドであり、明らかに動作する while ループで呼び出されます。makeEnt は、self.newMonsterList の Key として it[1] を持つエンティティを追加します。これは機能します、私はそれをテストしました。したがって、このすべてのコード (つまり、このコードを呼び出す while ループ) の最初の完全なラウンドの後に newMonsterList にある ID は、2 番目の後にそこにあるべきではありません。しかし、そうです。一方、newMonsterList の内容が既にキーであるかどうかを makeEnt でチェックすると、正しい結果が得られます。したがって、newMonsterList は while ループのどの実行で適切に空にされていないと結論付けます。私は今、2 時間の異なるバージョンを試しています....誰かがアイデアを得ましたか?
私はそれをもっと簡単に書き留めようとしています: a は Ints のリストです
d は int をキーとする dict です
While True:
b=[]
for it in a:
if (it not in d):
b.append(it)
print it
else:
print it
for k in b:
d[k] = k
モンスターリストが実際に各ターンで空になることがわかりましたが、ifclause (「if (it not in d):」) では、「it」が各ターンのリストに追加されます。ただし、「それ」も最初の反復後に間違いなく d にあるため、印刷できます。