我想创建一个函数,它接受一个或多个集合的列表,并找到列表中所有集合的对称差,即结果应该是一组值,每个值只包含在一个单独的集合中。(如果我认为这是对称差,请纠正我。)
例如:
>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s3 = set([2, 3, 7])
>>> s4 = set([2, 5, 9])
>>> myfunc([s1, s2, s3, s4])
{1, 4, 5, 7, 9}
有什么内置的东西可以在上面代替myfunc
使用吗?或者我用这样的方法:
def myfunc(sets: List[set]) -> set:
sd = set()
goners = set()
for s in sets:
still_ok = s - goners
sd = sd.symmetric_difference(still_ok)
goners = goners.union(s.difference(sd))
return sd
有没有更好的/更有效的/“Pythonic”方法?你知道吗
对于可以使用操作符和函数对内置Python对象执行的操作,操作符版本通常比函数版本快,因为在访问实例属性和进行显式函数调用时会有开销。另外,对集合执行就地更新可以避免创建额外的数据副本,并提高程序的效率。你知道吗
使用集合运算符的方法的改进版本如下所示:
性能测量:
你想要一个集合B包含所有成员,这些成员只包含在a中的一个集合中?你知道吗
首先,是的,你的观察是错误的,多个集合的对称差不是只出现在单个集合中的元素集合,而是所有集合中总数为奇数的元素集合,因此(s1,s2,s3,s4)的对称差将是{1,3,4,5,7,9}。你知道吗
相关问题 更多 >
编程相关推荐