python - 检查字典中的任何键是否匹配任何值
问题描述
我正在尝试解决这个问题:
令 d(n) 定义为 n 的真因数之和(小于 n 的数均分为 n)。如果 d(a) = b 且 d(b) = a,其中 a ≠ b,则 a 和 b 是友好对,a 和 b 中的每一个都称为友好数。
例如,220的真因数是1、2、4、5、10、11、20、22、44、55和110;因此 d(220) = 284。284 的真因数是 1、2、4、71 和 142;所以 d(284) = 220。
评估所有小于 10000 的友好数字的总和。
我想出了一个字典,其中包含所有数字 0 到 9999 的 x:d(x),如下所示:
sums = {x:sum(alecproduct.find_factors(x))-x for x,y in enumerate(range(10**4))}
其中 alecproduct.findfactors 是我自己的模块中的一个函数,它返回一个数字的所有因子的列表
不过,我不确定从这里去哪里。我尝试遍历字典并从每个 kv 对中创建元组,如下所示:
for k,v in sums.items():
dict_tups.append((k,v))
但我认为这对我没有帮助。关于如何检测任何字典键是否匹配任何字典值的任何建议?
编辑 - 我的解决方案基于 6502 的回答:
sums,ap = {x:sum(find_factors(x))-x for x,y in enumerate(range(10**4))}, []
for x in sums:
y = sums[x]
if sums.get(y) == x and x != y:
ap.append(x)
print(ap)
print('\nSum: ', sum(ap))
解决方案
你的问题几乎已经解决了......只要把所有的夫妇都拿出来:
for x in my_dict:
y = my_dict[x]
if my_dict.get(y) == x:
# x/y is an amicable pair
...
请注意,每对将被提取两次(x
/y
和y
/ x
),并且仅提取一次完美数(作为除数之和的数字);从您的问题文本中不确定 6/6 是否被认为是友好的一对。
推荐阅读
- npm - 如何提供 npm 脚本的使用信息
- c# - 将平移按钮添加到 C# WinForm eDrawings 查看器
- sed - 使用 sed(或其他命令行程序)删除每隔 X 行
- sql-server - 如何远程检查两个 SQL 数据行是否相同,而不在服务器之间发送所有数据?
- c# - 如何在控制台应用程序中使用实体框架从数据库中填充 html 字段?
- javascript - 当我遍历一个对象时,为什么我的数组没有按应有的方式更新?Javascript
- eiffel - 在 Eiffel 中使用循环初始化数组
- html - 图片无法在谷歌浏览器上加载
- django - DeleteView 中的 AttributeError
- ios - Swift4 条码(ean13)不起作用