如何通过与另一个集合相交将一个集合拆分为两个集合?

2024-04-28 04:20:29 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有两套:

s1 = {1, 2, 3, 4, 5}
s2 = {4, 5, 6, 7, 8}

我想把s1分成{4, 5}{1, 2, 3},其中第一部分是s1s2的交点,第二部分是余数

我可以这样做:

part1 = s1.intersection(s2)
part2 = s1.difference(s2)

但在我看来,这样我将执行两次完全相同的操作,在大型设备上可能需要很长时间。我可以用Python中的一个操作来完成吗?我想做一些像

part1, part2 = slit_sets(s1, s2)

Tags: setspart2part1s2s1交点differenceintersection
2条回答

为什么不使用简单循环:

def slit_sets(s1, s2):
    inter = set()
    diff = set()
    for s in s1:
        if s in s2:
            inter.add(s)
        else:
            diff.add(s)
    return inter, diff

没有一个内置操作会同时返回交叉点的差值,因此您始终需要调用两个方法

直觉上我预料到了

i = s1.intersection(s2)
d = s1.difference(i)
return i,d

快于

i = s1.intersection(s2)
d = s1.difference(s2)
return i,d

由于它计算的是一个较小的集合的差异,但这是不真实的-timeit即使对于包含数千个元素的大型集合,结果也大致相等。相反,使用以下方法可以实现约5%的轻微改善

d = s1.difference(s2)
i = s1.difference(d)
return i,d

相关问题 更多 >