小编Jor*_*iaz的帖子

从列表列表中创建一个 numpy 集合数组

我正在尝试制作从列表列表中提取的组列表​​。我的主列表包含不同长度的列表。我想有效地将​​包含来自另一个子列表的至少一个值的所有子列表分组。例如我想要这个:

[[2],[5],[5,8,16],[7,9,12],[9,20]]
Run Code Online (Sandbox Code Playgroud)

像这样分组

my_groups = {"group1":[2], "group2":[5,8,16], "group3":[7,9,12,20]}
Run Code Online (Sandbox Code Playgroud)

我想这样做的方法是创建将子列表转换为集合并使用reduce intersect1d

reduce(np.intersect1d, (SUPERLIST))
Run Code Online (Sandbox Code Playgroud)

然后将结果放入字典中。但我不知道如何在不遍历列表的情况下将其转换为一组集合。有没有办法做到这一点或更有效的方式,我失踪?

编辑

没有 numpy 我会做这样的事情:

my_dict = dict()
unique_id = 0
for sub_list_ref in super_list:
    sub_set_ref = set(sub_list_ref)
    for sub_list_comp in super_list:
        sub_set_comp = set(sub_list_comp)
        if len(sub_set_ref.intersection(sub_set_comp))>0:
            my_dict[unique_id] = sub_set_ref.union(sub_set_comp)
            updated_id = unique_id+1
    if updated_id == unique_id:
        my_dict[unique_id] = sub_list_ref
    else:
        unique_id = updated_id
Run Code Online (Sandbox Code Playgroud)

编辑 2

昨天这个问题得到了 DarryIG 的一个很好的回答,今天我设法制作了一个更有效的版本。

def coalesce_groups(current_list, super_list, iterations):
    if iterations <= 0:
        print("YOU HAVE ITERATED MORE THAN 3 TIMES")

    tmp_list = current_list
    for …
Run Code Online (Sandbox Code Playgroud)

python numpy list set

5
推荐指数
1
解决办法
497
查看次数

标签 统计

list ×1

numpy ×1

python ×1

set ×1