0

同じタイプのサブリストのより大きなリストにサブリストを追加しようとしています。

サブリスト:

[x-value,y-value, i, 100]

ただし、追加する前に同じ x 値と y 値を持つサブリストが既に存在するかどうかをコードで確認して、この場合、ツリーが重複しないようにしたいと思います (質問しないでください)。 .

これは私がリストを構築している方法です:

food = []
 for i in range(amount): 
        food.append([
            randint(100, 700), #X
            randint(100, 700), #Y
            i, #identifier
            100]) #energy
4

3 に答える 3

1

値の一意性を確保しようとして(x, y)いて、それらに関連付けるデータがある場合、これはディクショナリの最適な使用例です。

food = {}
for i in range(amount):
    coords = randint(100, 700), randint(100, 700)
    if coords not in food:
        food[coords] = [
            i,   #identifier
            100, # energy
        ]
于 2012-11-20T21:14:54.200 に答える
0

「in」を使用するか、辞書順にソートする辞書を使用する以外に、より良い方法かもしれません。次に、2D 二分探索を使用して、探しているものを見つけます。

これはおそらく、多くの重複が予想される場合にのみ役立ちますが、それ以外の場合は、単純な線形検索で十分です。

注: もともと、距離による並べ替えが提案されていましたが、よく考えてみると、この並べ替えはこの状況ではあまり役に立ちません。

于 2012-11-20T21:23:28.257 に答える
0
food = []
for i in range(amount):
    x,y = randint(100, 700),randint(100, 700)
    value = [x,y,i,100]
    if  all([True if x[0]!=x and x[1]!=y else False for x in food]): #check for duplicated x,y
        food.append(value)
于 2012-11-20T21:11:56.857 に答える