6

私はpygameのpython(2.7)で簡単なゲームを書いています。このゲームでは、2D 座標を保存する必要があります。これらのアイテムの数は 0 から始まり、各ステップで 2 ずつ増加します。それらは最大 6000 まで増加します。各ステップで、9 つの特定の座標が含まれているかどうかを確認する必要があります。(x,y) として単純にリストに格納しようとしましたが、そのようなリストを検索するのは効率的ではありません。

これらの座標を保存して、それらをより効率的に検索するにはどうすればよいですか?

各ステップで私がやろうとしていたこと:

# Assuming:
myList = []
co1 = (12.3,20.2) # and so on..
valuesToCheck = [co1,co2,co3,co4,co5,co6,co7,co8,co9]

# In each step:
# Adding 2 coordinates
myList.append((x1,y1))
myList.append((x2,y2))
# Searching 9 specific coordinates among all
for coordinate in valuesToCheck:
    if coordinate in myList:
        print "Hit!"
        break
# Note that the valuesToCheck will change in each step.
del valuesToCheck[0]
valuesToCheck.append(co10)

座標は浮動小数点数であり、その最大値は制限されています。それらは (0.0,0.0) から (1200.0,700.0) までです。

これについて検索しましたが、保存された値は文字列または定数のいずれかでした。

4

2 に答える 2

5

私の理解が正しければ、要素をmyListに追加していますが、要素を削除することはありません。valuesToCheck次に、 のメンバーシップのすべての要素をテストしmyListます。

その場合は、myList をリストではなくセットに変換することで、パフォーマンスを向上させることができます。リストのメンバーシップのテストは O(n) ですが、セットのメンバーシップのテストは通常​​ O(1) です。

構文はほとんど変更されません。

mySet = set()

# your code

# Adding 2 coordinates
mySet.add((x1,y1))
mySet.add((x2,y2))
# Searching 9 specific coordinates among all
for coordinate in valuesToCheck:
    if coordinate in mySet:
        print "Hit!"
        break
# Note that the valuesToCheck will change in each step.
del valuesToCheck[0]
valuesToCheck.append(co10)
于 2013-04-01T20:03:06.933 に答える