Python之旅Week 1 Day 2

每日小计
第二天就没发出去,我发现CSDN有一个小小的BUG,就是不会自动缓存,而且如果不点存为草稿就不会自动存,昨天晚上写的就当是浪费了,一个多小时,搞了一个题,每天真的是,好多事儿,我都无语了,突然就来了,心里贼想骂人,本来说晚上或者下午回来把昨天晚上的写完,然后继续补上原本今天该看的,结果,某些事耽误了,无语呀…能说什么呢,只要坚持就好了,每天其实也就10分钟左右的课时,看见很短,但是,除了看以外,自己还想尝试一下,这样就时间长了,不管怎么样,加油就好了,今天老师表扬我了,有点高兴,证明自己的努力还是有用的,下面正式进入今天的内容:

看看看…我说什么来着,刚写完就来活儿了,算年龄,这个…,其实,这个也不见得是一件坏事,这样还能多刷一遍题,也算是有助于理解和加深记忆,一切都是最好的安排:)

本周的主要内容是:数据结构与算法相关问题与解决技巧

Python必刷题之三:

  1. 如何快速找到多个字典中的公共键(key)

1、如何快速找到多个字典中的公共键(key):
在一个比赛中,有很多场比赛,每次比赛之后需要统计每位球员的进球数量,最后统计出,每场比赛都有进球的球员。
方法一:通过字典解析,并且使用老办法for循环来解决:

from random import randint,sample
Cou1=sample('abcdefg',randint(1,3))
print(Cou1)
Dict1={x:randint(1,4) for x in sample('abcdefg',randint(4,5))}
print(Dict1)
Dict2={x:randint(1,4) for x in sample('abcdefg',randint(4,5))}
print(Dict2)
Dict3={x:randint(1,4) for x in sample('abcdefg',randint(4,5))}
print(Dict3)
NewList=[]
for x in Dict1:
    if x in Dict2 and x in Dict3:
        NewList.append(x)
print(NewList)
#输出结果:
['e', 'b', 'g']
{'b': 4, 'e': 1, 'a': 3, 'c': 4}
{'e': 4, 'b': 4, 'd': 3, 'f': 3}
{'a': 1, 'g': 2, 'b': 2, 'd': 3, 'e': 1}
['b', 'e']

方法二:在字典中,我们可以使用字典中筛选键的所有信息来进行统计

from random import randint,sample
Cou1=sample('abcdefg',randint(1,3))
print(Cou1)
Dict1={x:randint(1,4) for x in sample('abcdefg',randint(4,5))}
print(Dict1)
Dict2={x:randint(1,4) for x in sample('abcdefg',randint(4,5))}
print(Dict2)
Dict3={x:randint(1,4) for x in sample('abcdefg',randint(4,5))}
print(Dict3)
NewDicts1=Dict1.keys()
print(NewDicts1)
NewDicts2=Dict2.keys()
print(NewDicts2)
NewDicts3=Dict3.keys()
print(NewDicts3)
output=NewDicts1 & NewDicts2 & NewDicts3
print('output:',output)
#输出结果:
['a', 'd', 'b']
{'e': 1, 'f': 3, 'a': 3, 'c': 3, 'b': 3}
{'d': 3, 'c': 1, 'a': 4, 'b': 1}
{'g': 4, 'f': 2, 'c': 3, 'd': 4}
dict_keys(['e', 'f', 'a', 'c', 'b'])
dict_keys(['d', 'c', 'a', 'b'])
dict_keys(['g', 'f', 'c', 'd'])
output: {'c'}

这种方法结合了,我们在前面所学到的知识,也就是提取字典中的键值对,并且储存在元组或者列表中,如果存储在元组中,则需要使用Zip函数进行重新组装。
当我们想要进行读取字典中键值的时候,可以使用dict.keys(),dictvalus(),来进行读取。
sorted()排序函数的使用。

方法三:使用map().reduce()函数解决,在其中,map是映射函数,reduce函数是递归函数的一种。

from random import randint,sample
from functools import reduce

Cou1=sample('abcdefg',randint(1,3))
print(Cou1)
Dict1={x:randint(1,4) for x in sample('abcdefg',randint(4,5))}
print(Dict1)
Dict2={x:randint(1,4) for x in sample('abcdefg',randint(4,5))}
print(Dict2)
Dict3={x:randint(1,4) for x in sample('abcdefg',randint(4,5))}
print(Dict3)
Maps=map(dict.keys,[Dict1,Dict2,Dict3])
print(list(Maps))
Reduces=reduce(lambda x ,b: x & b ,map(dict.keys,[Dict1,Dict2,Dict3]))
print(Reduces)
#输出结果:
['e']
{'d': 1, 'c': 1, 'a': 1, 'e': 3}
{'f': 2, 'e': 4, 'd': 3, 'b': 3, 'c': 3}
{'f': 3, 'b': 3, 'd': 1, 'c': 4, 'e': 4}
[dict_keys(['d', 'c', 'a', 'e']), dict_keys(['f', 'e', 'd', 'b', 'c']), dict_keys(['f', 'b', 'd', 'c', 'e'])]
{'c', 'e', 'd'}

这种方法中,使用到了map和reduce两种函数,map函数是映射函数,就是当我们遇到了需要数据一一对应的时候则会用到,而reduce函数,是递归函数,当传入参数是一个列表或者是一个元组的时候,前两个数值进行运算后,得出的结论与第三个数值进行运算,得出的结果与第四个进行运算,以此类推…,具体使用方法如下,例程:

#map()函数使用例程:
List1=[1,2,3]
List2=[4,5,6]
Result=map(lambda x,y:x**x+y,*[List1,List2])
print(list(Result))
#reduce()函数使用例程:
from functools import reduce
Result1=reduce(lambda x,y:x+y,(1,2,3,4,5))
print(Result1)
#这里说一下,大家如果有不懂得,可以在网上查一下用法,刚刚我也被这个函数所困扰,感谢开源

每日小结
今天又算是拖了一次,耽误了睡觉不说,眼睛还疼了,终于写完了,总结一下,需要继续努力,坚持了,这天天的,现在推一会儿,一会儿再往后推,自制力还是需要加强,多喝水,看看别人背单词,看书的,自己也要上进,努力了,需要不断的学习,每天进步一点点,水滴还石穿呢。

为了你爱的人,为了你爱的梦,加油,努力,永远不要放弃!——Dream

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值