将三维列表的出现次数与参照列表相匹配



我正在处理一个问题,但我遇到了一个障碍,我希望你能帮助我,所以基本上我有一个三维坐标列表,我正在与另一个用于参考的三维坐标列表进行比较。我想做的是计算坐标的出现次数,并将出现的次数与参考列表相匹配。为此,我将coordinates list转换为tuples,然后使用Counter来计算出现次数,我需要的是将Count中找到的keyreference 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),所以我需要将keyreference 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]]

相关内容

  • 没有找到相关文章

最新更新