您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

根据重叠的项目将列表的Python列表分组

根据重叠的项目将列表的Python列表分组

您是根据集合进行分组,因此请使用集合来检测新的分组:

def grouper(sequence):
    group, members = [], set()

    for item in sequence:
        if group and members.isdisjoint(item):
            # new group, yield and start new
            yield group
            group, members = [], set()
        group.append(item)
        members.update(item)

    yield group

这给出:

>>> for group in grouper(paths):
...     print group
... 
[['D', 'B', 'A', 'H'], ['D', 'B', 'A', 'C'], ['H', 'A', 'C']]
[['E', 'G', 'I'], ['F', 'G', 'I']]

或者您可以将其再次投射到列表中:

output = list(grouper(paths))

这假定组是连续的。如果您有不相交的组,则需要处理整个列表并遍历到目前为止为每个项目构造的所有组:

def grouper(sequence):
    result = []  # will hold (members, group) tuples

    for item in sequence:
        for members, group in result:
            if members.intersection(item):  # overlap
                members.update(item)
                group.append(item)
                break
        else:  # no group found, add new
            result.append((set(item), [item]))

    return [group for members, group in result]
python 2022/1/1 18:49:10 有644人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶