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
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 回答
0

除了使用“in”或按字典顺序对它们进行排序的字典可能是更好的方法。然后使用 2D 二进制搜索来查找您要查找的内容。

尽管这可能仅在您期望有很多重复项时才有用,否则简单的线性搜索就足够了。

注意:最初建议按距离排序,经过反思,这种排序在这种情况下并不是很有帮助。

于 2012-11-20T21:23:28.257 回答