我正在尝试制作从列表列表中提取的组列表。我的主列表包含不同长度的列表。我想有效地将包含来自另一个子列表的至少一个值的所有子列表分组。例如我想要这个:
[[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)
昨天这个问题得到了 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)