我正在处理一个问题,但我遇到了一个障碍,我希望你能帮助我,所以基本上我有一个三维坐标列表,我正在与另一个用于参考的三维坐标列表进行比较。我想做的是计算坐标的出现次数,并将出现的次数与参考列表相匹配。为此,我将coordinates list
转换为tuples
,然后使用Counter
来计算出现次数,我需要的是将Count
中找到的key
与reference list
中的坐标进行匹配,并将values
存储在列表列表中。也许代码会比我解释得更好。这是我的代码
from collections import Counter
reference = [[[2, 3], [3, 2], [3, 4], [4, 3]],
[[2, 3], [2, 4], [3, 2], [4, 2]], #3D References list with all the coordinates.
[[2, 3], [2, 4], [3, 2], [4, 2]]]
coordinates = [[[3, 2]], [[3, 2], [2, 4], [2, 4]], [[2, 4]]] #List to match the reference list
newlist = [[tuple(j) for j in i] for i in coordinates] #Transform the coordinates list to tuple to use Counter
aux = []
for i in newlist:
aux.append(Counter(i)) #Count the number of occurrences.
print(aux)
#aux = [Counter({(3, 2): 1}), Counter({(2, 4): 2, (3, 2): 1}), Counter({(2, 4): 1})
a = [list(i.values()) for i in aux] #Getting only the values of occurrence.
print(a) #a = [[1], [1, 2], [1]]
aux list
中的第一个计数器只有出现1次的键(3, 2)
,所以我需要将key
与reference list
的第一个列表上的坐标进行匹配,正如你在第一个计数器中看到的,与其他列表相比,有一些缺失的keys
(坐标(,所以我要求这些缺失的坐标的值为零。第二个计数器有两个键(2, 4), (3, 2)
,对应的值为2和1,与reference list
的第二个列表相比,还有一些缺失的坐标,所以它们的值为零,以此类推。这是我想要的输出:
#Output
a = [[0, 1, 0, 0], [0, 2, 1, 0], [0, 1, 0, 0]
我有办法做到这一点吗"填充";值为零的缺失坐标?如果你能给我指一个正确的方向,那就太好了,对我糟糕的英语感到抱歉!。非常感谢!
只需浏览reference
中的每个坐标,并在aux
中的相应计数器中检查该坐标的计数
aux = [Counter(tuple(j) for j in i) for i in coordinates]
a = [[cntr[tuple(j)] for j in i] for i,cntr in zip(reference,aux)]
print (a)
# [[0, 1, 0, 0], [0, 2, 1, 0], [0, 1, 0, 0]]