Tim*_*ugh 4 python discrete-mathematics
我正在参加离散数学课程,并试图复制De Morgan的定律
补码(B联合C)=补码(B)与补码(C)相交。
我尝试搜索Python在集合上执行补码的能力,但没有发现太多。
所以我只是在IDLE中尝试过。这看起来正确吗?
U = {'pink', 'purple', 'red', 'blue', 'gray', 'orange', 'green', 'yellow', 'indigo', 'violet'}
A = {'purple', 'red', 'orange', 'yellow', 'violet'}
B = {'blue', 'gray', 'orange', 'green'}
C = {'pink', 'red','blue','violet'}
Comp_B = U - B
Comp_C = U - C
Comp_Union_BC = Comp_B.intersection(Comp_C)
print(Comp_Union_BC)
Run Code Online (Sandbox Code Playgroud)
集合的补码不是集合中的所有内容,而是“通用集合”的一部分。如果没有通用集的定义,就不能真正给出set的补集的标准库定义。
而且,Python set类型处理离散对象集,而不是可能无限大的数学构造,例如所有自然数。因此,Python不支持单个通用集的一般,模糊和无限的想法。
对于特定域,如果可以用离散术语定义通用集,则只需定义自己的complement()可调用对象。例如,给定通用集合U的全局定义,您可以将集合的补码定义a为U与该集合之间的差:
U = {'pink', 'purple', 'red', 'blue', 'gray', 'orange', 'green', 'yellow', 'indigo', 'violet'}
def complement(a):
# difference between a global universal set U and the given set a
return U - a
Run Code Online (Sandbox Code Playgroud)
或者,更简单地说:
complement = U.difference
Run Code Online (Sandbox Code Playgroud)
然后只需通过一组complement()测试假设即可:
>>> # set | set == set union, set & set == set intersection
...
>>> complement(B | C) == complement(B) & complement(C)
True
Run Code Online (Sandbox Code Playgroud)
所以是的,您的解释是正确的,U - B产生的补码B。