博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法试题 - 实现公共键查询
阅读量:5809 次
发布时间:2019-06-18

本文共 1223 字,大约阅读时间需要 4 分钟。

题目

查询多个字典中的公共键, 题目实例

每轮比赛 6个人 都有可能得分, 3轮下来都得分的有谁?

每轮比赛 6个人 都有可能得分, n 轮下来都得分的有谁?

解析

思路一

遍历第一轮的记录, 用键来比对二轮,三轮都有此键的情况进行记录

稍微有点啰嗦, 执行效率不是很好, 而且对于 n 的处理也比较麻烦

思路二

利用集合的交集进行便携的查询,

然后使用 map 函数进行将所有轮字典分别转换成一个集合然后集中在一个容器中

然后利用 reduce 函数对这个容器内的所有集合元素进行 &  操作取交集

答案

答案一

import randomres1 = random.sample("abcdefg", random.randint(3, 6))res2 = random.sample("abcdefg", random.randint(3, 6))res3 = random.sample("abcdefg", random.randint(3, 6))s1 = {k: random.randint(1, 3) for k in res1}s2 = {k: random.randint(1, 3) for k in res2}s3 = {k: random.randint(1, 3) for k in res3}print(s1)print(s2)print(s3)l = []for k in s1:    if k in s2 and k in s3:        l.append(k)print(l)

答案二

import randomfrom functools import reducefrom pprint import pprintn = 3li = []while n:    res = random.sample("abcdefg", random.randint(3, 6))    s = {k: random.randint(1, 3) for k in res}    li.append(s)    n -= 1pprint(li)"""[{'a': 3, 'b': 2, 'c': 1, 'd': 3, 'f': 3, 'g': 2}, {'b': 1, 'c': 2, 'e': 3, 'g': 1}, {'a': 2, 'c': 3, 'f': 3}]"""res = list(map(set, li))print(res)  # [{'f', 'c', 'b', 'g', 'a', 'd'}, {'e', 'g', 'c', 'b'}, {'f', 'c', 'a'}]res = reduce(lambda a, b: a & b, res)print(res)  # {'c'}

 

转载于:https://www.cnblogs.com/shijieli/p/10864838.html

你可能感兴趣的文章
如何用纯 CSS 为母亲节创作一颗像素画风格的爱心
查看>>
Linux基础命令---rmdir
查看>>
优秀程序员共有的7种优秀编程习惯
查看>>
iOS sqlite3(数据库)
查看>>
粤出"飞龙",打造新制造广东样本
查看>>
编玩边学获数千万元A轮融资,投资方为君联资本
查看>>
开发者论坛一周精粹(第五十五期) 全站HTTPS之OSS教程 一次可以备案几个网站?...
查看>>
蓝图(Blueprint)详解
查看>>
Spark之SQL解析(源码阅读十)
查看>>
Android图片添加水印图片并把图片保存到文件存储
查看>>
C#字符串的不变性
查看>>
前端路由简介以及vue-router实现原理
查看>>
比特币系统采用的公钥密码学方案和ECDSA签名算法介绍——第二部分:代码实现(C语言)...
查看>>
分享15款很实用的 Sass 和 Compass 工具
查看>>
AMD优势: 与众不同 选择丰富
查看>>
玩转高性能超猛防火墙nf-HiPAC
查看>>
简单按日期查询mysql某张表中的记录数
查看>>
自动化部署之jenkins发布PHP项目
查看>>
C/C++编程可用的Linux自带工具
查看>>
如何判断webview是不是滑到底部
查看>>