python - 如何在Python中对列表列表中的元素进行分组?

标签 python python-3.x

我正在尝试按邻域大小有效地将顶点列表分组/嵌套到顶点列表列表中。

邻域大小是顶点v的一个属性,可以通过调用len(v.neighbours)获得。

我的输入是未排序的顶点列表。我试图获得的输出应如下所示:

[[all vertices with len(v.neighbours) == 1], [... == 2], [... == 4]]    

它应该是一个列表列表,其中每个子列表包含具有相同邻域大小的顶点,从小到大排序,没有空列表。我不需要子列表的索引来映射到所包含顶点的邻域大小。

我知道如何通过列表理解来实现这一点,但效率相当低:

def _group(V: List[Vertex], max: int) -> List[List[Vertex]]:
    return [[v for v in V if v.label == i] for i in range(max)]

此外,我不想将最大邻域大小作为参数传递,而是在分组期间计算它,并且我也在寻找一种在分组期间过滤掉空列表的方法。

我研究了更有效的方法来对顶点进行分组,例如使用字典作为中间步骤,但我还没有设法产生工作结果。

谁能告诉我对顶点列表进行分组/嵌套的最有效方法?

提前致谢,如果之前已经发布过此内容,我们深表歉意,但我在另一个问题中找不到我要查找的内容。

最佳答案

一次传递输入,将结果放入中间字典中,将字典转换为您想要的输出。

temp_result = defaultdict(list)

for v in vertices:
    temp_result[neighborhood_size(v)].append(v)

max_size = max(temp_result.keys())

return_val = list()
for i in range(max_size):
    if temp_result[i]: # check if empty
        return_val.append(temp_result[i])

关于python - 如何在Python中对列表列表中的元素进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55443898/

相关文章:

python-3.x - python Selenium : How to hide geckodriver?

c# - zip 函数的用途是什么(如在 Python 或 C# 4.0 中)?

python - 如何在 Pandas 中为字符串添加前导零格式?

python - 类型错误 : unsupported callable using Dataset with estimator input_fn

python - 使用比率绘制 RGB 颜色

python - 使用 pytest 运行单元测试时出错 - AttributeError : 'TestCaseFunction' object has no attribute 'get_marker'

python - 可以从 shogun 的 python 界面控制随机种子吗?

python - django-pipeline 不编译 sass 文件

python - 如何调整此代码以同时返回第二个和第三个 "Nearest Neighbors"?

python - multiprocessing.Queue 作为池工作程序的参数中止工作程序的执行