场景实例:

西班牙足球联赛,每轮球员进球统计:

第一轮:{’1’:1,‘2’:4,‘5’:2,‘7’:3}

  第一轮:{’2’:1,‘5’:4,‘6’:2,‘3’:3}

第一轮:{’1’:1,‘4’:4,‘6’:2,‘7’:3}

……

问题:统计前N轮,都进球的球员?

如何解决这个问题呢?

方法1:

#!/usr/bin/python3

from random import randint, sample

def get_s(player):
# 获得三个赛季的随机记录
s1 = {k: randint(1, 6) for k in sample(player, randint(3, 6))}
s2 = {k: randint(1, 6) for k in sample(player, randint(3, 6))}
s3 = {k: randint(1, 6) for k in sample(player, randint(3, 6))}
return s1, s2, s3 def public_keys(s1, s2, s3):
# 定义中间列表
median = [] # 判断字典公共key,在s1,在s2,在s3肯定是公共key
for key in s1:
if key in s2 and key in s3:
median.append(key)
return median if __name__ == '__main__':
# 生成abcdef个球员
player = 'abcdef' # 获得3个赛季的随机数
s1, s2, s3 = get_s(player) # 获取3个赛季都进球的球员
result = public_keys(s1,s2,s3)
print(result)

方法2:

进球的球员都是数据中的key,通过求出每一轮的keys,然后做个交集就可以求出结果

#!/usr/bin/python3

from random import randint, sample

def get_s(player):
# 获得三个赛季的随机记录
s1 = {k: randint(1, 6) for k in sample(player, randint(3, 6))}
s2 = {k: randint(1, 6) for k in sample(player, randint(3, 6))}
s3 = {k: randint(1, 6) for k in sample(player, randint(3, 6))}
return s1, s2, s3 def public_keys(s1, s2, s3):
# 返回各字典的单边值,并求出交集,即是结果
return s1.keys() & s2.keys() & s3.keys() if __name__ == '__main__':
# 生成abcdef个球员
player = 'abcdef' # 获得3个赛季的随机数
s1, s2, s3 = get_s(player) # 获取3个赛季都进球的球员
result = public_keys(s1, s2, s3)
print(result)

  方法3:

  当N轮时候,通过map和reduce函数

#!/usr/bin/python3

from random import randint, sample
from functools import reduce def get_s(player):
# 获得三个赛季的随机记录
s1 = {k: randint(1, 6) for k in sample(player, randint(3, 6))}
s2 = {k: randint(1, 6) for k in sample(player, randint(3, 6))}
s3 = {k: randint(1, 6) for k in sample(player, randint(3, 6))}
return s1, s2, s3 def public_keys(s1, s2, s3):
result = reduce(lambda a, b: a & b, map(dict.keys, [s1, s2, s3]))
# map(dict. keys,[s1,s2,s3,......N] 获得每轮的keys集合,s1……N为字典对象
# reduce((lamda a,b: a&b,map()) 把map获得的集合,依次放入a,b,返回交集
# a,b = a&b, map中取出的一个值map(dict.keys, [s1, s2, s3])取得新的列表
# reduce中的lambda只能传入两个参数
# map 为高阶函数,接收一个map(函数, [参数]),迭代参数列表,一个传入函数中处理,返回处理结果变成新的列表 return result if __name__ == '__main__':
# 生成abcdef个球员
player = 'abcdef' # 获得3个赛季的随机数
s1, s2, s3 = get_s(player) # 获取3个赛季都进球的球员
result = public_keys(s1, s2, s3)
print(result)

最新文章

  1. .NET 实现并行的几种方式(四)
  2. bzoj1001最小割
  3. iOS编译FFmpeg、kxmovie实现视频播放 (转载)
  4. 挑战程序2.1.4 穷竭搜索>>深度优先搜索
  5. 一个login
  6. [转]使用 google gson 转换Timestamp或Date类型为JSON字符串.
  7. DevExpress12.2.4 GridControl相关技巧
  8. careercup-排序和查找 11.2
  9. ReactiveCocoa Tutorial
  10. Linux安装Tomcat外部不能访问
  11. Effective Java 之-----静态工厂与构造器
  12. (转)理解CPU steal time
  13. Alex网络
  14. LOJ2251 [ZJOI2017] 树状数组【线段树】【树套树】
  15. [leetcode]49. Group Anagrams变位词归类
  16. LeetCode题解之Leaf-Similar Trees
  17. ORACLE数据库导入的时候出现IMP-00038: 无法转换为环境字符集句柄
  18. [转]vi 常用命令行
  19. [转]Oracle存储过程总结
  20. URAL 1941

热门文章

  1. [SCOI2013]摩托车交易 题解
  2. Mac 系统安装robot framework
  3. Unable to add window -- token null is not for an application错误的解决方法 android开发
  4. C# 自定义无边框窗体阴影效果
  5. 集成react-native-image-picker时,报错Couldn't get file path for photo
  6. 编程体系结构(01):Java编程基础
  7. Live a "love to" life,not a "have to" life.
  8. Mysql数据库扩展
  9. Apache报错:无法使用可靠的服务器域名
  10. Azure Storage 系列(五)通过Azure.Cosmos.Table 类库在.Net 上使用 Table Storage