Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在嵌套列表中查找和分组相同的值(浮点向量)_Python_Sorting_Vector_Grouping - Fatal编程技术网

Python 在嵌套列表中查找和分组相同的值(浮点向量)

Python 在嵌套列表中查找和分组相同的值(浮点向量),python,sorting,vector,grouping,Python,Sorting,Vector,Grouping,我有一个包含向量(浮动x、y、z值)的列表,我正在尝试将相同的值分组在一起 以下是单个列表的工作示例: from collections import defaultdict example_list = [1,5,1,4,2,5,5,4,5,7,2,1,7,9] d = defaultdict(list) for item in example_list: d[item].append(item) groupedlist = sorted(d[x] for x in d)

我有一个包含向量(浮动x、y、z值)的列表,我正在尝试将相同的值分组在一起

以下是单个列表的工作示例:

from collections import defaultdict

example_list = [1,5,1,4,2,5,5,4,5,7,2,1,7,9] 

d = defaultdict(list)

for item in example_list:
     d[item].append(item)

groupedlist = sorted(d[x] for x in d)

# Returns [[1, 1, 1], [2, 2], [4, 4], [5, 5, 5, 5], [7, 7], [9]]
我正在尝试为嵌套的3D向量列表(X,Y,Z)实现相同的结果


只需将
defaultdict
的键放入元组:

from collections import defaultdict

example_list = [[1,2,4], [1,2,3], [3,4,3], [1,3,2], [5,7,1], [3,4,3], [5,6,1]]

d = defaultdict(list)

for item in example_list:
    d[tuple(item)].append(item)

groupedlist = sorted(d[x] for x in d)

仅仅使用原始“向量”作为
d
的键的问题在于列表是不可散列的;为它们创建元组可以解决这一问题。

您想要的输出不能反映您作为输入的内容,如果您想要对公共子列表进行分组,您可以使用
itertools.groupby
,考虑到您想要使用dict对输出进行排序,然后使用groupby从排序列表中创建分组没有那么重要:

from itertools import groupby

print([list(v) for _,v in groupby(sorted(example_vectorlist))])
对于您来说,原始列表的输出相同:

example_list = [1,5,1,4,2,5,5,4,5,7,2,1,7,9]
print([list(v) for _,v in groupby(sorted(example_list))])
[[1, 1, 1], [2, 2], [4, 4], [5, 5, 5, 5], [7, 7], [9]]

不使用
defaultdict

example_vectorlist = [[1,2,4], [1,2,3], [3,4,3], [1,3,2], [5,7,1],[3,4,3], [5,6,1]]
d = {}
for el in example_vectorlist:
    try:
        d[tuple(el)].append(el)
    except KeyError:
        d[tuple(el)] = [el]
print d.values()

为什么您的期望输出中有2
[5,6,7]
?您的“期望输出”不是原始向量列表的分组。
example_vectorlist = [[1,2,4], [1,2,3], [3,4,3], [1,3,2], [5,7,1],[3,4,3], [5,6,1]]
d = {}
for el in example_vectorlist:
    try:
        d[tuple(el)].append(el)
    except KeyError:
        d[tuple(el)] = [el]
print d.values()