Python中求集合交集的intersection()方法

选择题
以下python代码的输出结果是什么?
set0 = {'a','b','c'}
set1 = {'b','c','d'}
set2 = {'c','d','e'}
newset = set0.intersection(set1,set2) 
print(newset)
选项:
A {'c'}
B {'a','b'}
C {'b','c'}
D {'a','b','c','d','e'}

问题解析
python集合的intersection()方法:
1.intersection() 方法的工作原理是:返回多个集合(集合的数量大于等于2)的交集,即新的集合包含了所有集合中所共有的元素。
2.intersection()方法的语法:set0.intersection(set1[,set2,...,setN]),set1是必选参数,[]表示可选参数(非必需参数),即set2,...,setN可以有,也可以没有,他们也是要被求交集的集合,使用逗号隔开。
3.intersection()方法的返回值:该方法返回一个新的集合,该新的集合为set0,set1...,setN的交集,即返回的新集合中的元素为:set0,set1...setN集合所共有的元素。
题目中:
set0={'a','b','c'},set1={'b','c','d'},set2={'c','d','e'},集合set0、set1和set2的共有元素为'c',所以set0.intersection(set1,set2)方法返回一个新的集合{'c'},即newset={'c'}。

答案
正确答案为:A
 

 

温馨期待
期待大家提出宝贵建议,互相交流,收获更大,助教:qmy

欢迎大家转发,一起传播知识和正能量,帮助到更多人。期待大家提出宝贵改进建议,互相交流,收获更大。辛苦大家转发时注明出处(也是咱们公益编程交流群的入口网址),刘经纬老师共享知识相关文件下载地址为:http://liujingwei.cn

首先介绍一下Paillier同态加密的原理:Paillier同态加密是一种公钥加密方案,它的主要特点是支持加法同态性,即密文的加法等同于明文的加法。具体来说,如果密文c1对应明文m1,密文c2对应明文m2,则密文c1+c2对应的明文就是m1+m2。在这种情况下,我们可以对加密后的数据进行计算,而不需要解密数据。 基于这个原理,我们可以使用Paillier同态加密来集合交集: 1. 首先,我们将两个集合A和B分别加密成两个密文c1和c2。 2. 然后,我们将两个密文相乘得到密文c3。 3. 接着,我们将密文c3解密得到明文m3。 4. 最后,我们根据明文m3的值来判断集合交集是否为空集。如果m3等于1,则表示集合交集不为空;否则,表示集合交集为空集。 下面是代码实现: ```python from Crypto.Util.number import * from random import randint # 生成两个素数p、q p = getPrime(1024) q = getPrime(1024) # 计算n = p * q n = p * q # 计算n的欧拉函数 phi_n = (p - 1) * (q - 1) # 选择一个随机数g,使得g的阶为n^2 while True: g = randint(1, n**2) if pow(g, phi_n, n**2) == 1: break # 加密函数 def encrypt(m, n, g): r = randint(1, n) c = (pow(g, m, n**2) * pow(r, n, n**2)) % (n**2) return c # 解密函数 def decrypt(c, n, g, phi_n): L = pow(c, phi_n, n**2) m = ((L - 1) // n) * inverse(phi_n, n) % n return m # 集合交集 def intersection(A, B): # 将集合A和集合B转换成列表 list_A = list(A) list_B = list(B) # 加密集合A encrypted_A = [encrypt(x, n, g) for x in list_A] # 加密集合B encrypted_B = [encrypt(x, n, g) for x in list_B] # 计算两个密文相乘 c3 = 1 for c1, c2 in zip(encrypted_A, encrypted_B): c3 = (c3 * c1 * c2) % (n**2) # 解密密文c3 m3 = decrypt(c3, n, g, phi_n) # 判断集合交集是否为空集 if m3 == 1: return set(list_A) & set(list_B) else: return set() # 测试代码 A = {1, 2, 3, 4, 5} B = {3, 4, 5, 6, 7} print(intersection(A, B)) # 输出 {3, 4, 5} ``` 需要注意的是,Paillier同态加密的加法同态性只支持加法操作,不支持减法、乘法和除法等其他操作。因此,在集合交集时,我们只能使用两个密文相乘来实现。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘经纬老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值