我想知道任何人都可以帮我解决这个问题,到目前为止我感觉如此接近......我似乎无法理解这一点。
我有一个按列排序的3D矢量列表(X,Y,Z) - 许多X值都是相同的。
# Example list (L)
L = [1,7,9], [2,4,9], [2,0,10], [1,12,9], [9,9,1], [4,6,2], [7,6,2], [4,12,6], [5,7,1]
# Desired result
R = [[1,7,9], [1,12,9]], [[2,4,9], [2,0,10]],[[4,6,2], [4,12,6]], [5,7,1], [7,6,2], [9,9,1]
# Example calling individual columns (real values expected to be in the 10's)
R[0] = [[1,7,9], [1,12,9]] # A column 2 high
R[3] = [5,7,1] # A column 1 high
使用集合模块中的Counter函数以及一些非常受欢迎的帮助,以下代码可以对单个列表进行排序:
from collections import Counter
N = [2,5,7,9,2,8,5,2,7,9]
C = Counter(N)
print [ [k,]*v for k,v in C.items()]
# Returns [[8], [9, 9], [2, 2, 2], [5, 5], [7, 7]]
我尝试将Y和Z值链接回新分组的X向量,但是当X列表的索引发生变化时,我遇到了索引问题。
对此的任何帮助都将非常感激,到目前为止,这是我的尝试和我正在探索的方向......(将值传递给函数)
from collections import Counter
N = [1,7,9], [2,4,9], [2,0,10], [1,12,9], [9,9,1], [4,6,2], [7,6,2], [4,12,6], [5,7,1]
def compareXvalues(VectorList):
global Grouped_X_Vectors
Xvectors = []
for i in xrange (len(VectorList)):
Xvectors.append(VectorList[i][0])
C = Counter(Xvectors)
Grouped_X_Vectors = [ [k,]*v for k,v in C.items()]
for i in xrange (len(Grouped_X_Vectors)):
#print Grouped_X_Vectors[i]
pass
print N
compareXvalues(N)
print Grouped_X_Vectors
任何反馈或帮助都会受到高度赞赏,我的大脑也会被炸掉。
答案 0 :(得分:3)
您可以在字典中按X
值累加它们,然后将结果排序到列表中。在我的示例中,我使用defaultdict,因为我想调用附加在字典的项目上,这使我无法初始化我遇到的每个X
值的列表。
>>> from collections import defaultdict
>>> L = [[1,7,9], [2,4,9], [2,0,10], [1,12,9], [9,9,1], [4,6,2], [7,6,2], [4,12,6], [5,7,1]]
>>> d = defaultdict(list)
>>> for item in L:
d[item[0]].append(item)
>>> R = sorted(d[x] for x in d)
>>> R
[[[1, 7, 9], [1, 12, 9]], [[2, 4, 9], [2, 0, 10]], [[4, 6, 2], [4, 12, 6]], [[5, 7, 1]], [[7, 6, 2]], [[9, 9, 1]]]
我知道这与您所采用的路径略有不同,但字典符合您将Y
和Z
值“关联”到X
的基本想法值。