python学习笔记(15):defaultdict的用法
好久没更新,被大佬们批评了。好吧,今天好好学习,天天向上一下。
众所周知,本人最近一直在刷题,但目的可能与大家有所不同。我的基础不是不好,所以我是抱着通过练习一些算法题目来查漏补缺、巩固下python
基础的。
虽然大部分简单的题目都做不出来,但是我还是愿意来刷一刷,原因呢,或许是为了弥补那些逝去的光阴吧。
打卡题目
这里先放上题目,有兴趣的同学可以试着做一做。
先上答案吧:
L=10
class Solution:
def findRepeatedDnaSequences(self, s: str) -> List[str]:
ans=[]
cnt=defaultdict(int)
for i in range(len(s)-L+1):
sub=s[i:i+L]
cnt[sub]+=1
if cnt[sub]==2:
ans.append(sub)
return ans
知识点
今天就介绍一下遇到的一个知识点:defaultdict
。当我看到答案的时候就在想,他为啥不用{}
呢。我就试了下:
直接报错了,keyError
。哦,百度一番,明白了:
当我使用普通的字典时,用法一般是dict={},添加元素的只需要dict[element] =value即,调用的时候也是如此,dict[element] = xxx,但前提是element在字典里,如果不在字典里就会报错。
defaultdict的作用是在于,当字典里的key不存在但被查找时,返回的不是keyError而是一个默认值
我们再看下源码,加深记忆:
defaultdict()返回类似字典类型的对象,其特点是会自动为将要访问的键(就算目前字典中并不存在这样的键)创建映射实体。也就是说,当通过key来访问对应的value时,普通字典中若还没有事先创建该键值对,则会发生访问错误。而defaultdict()可以在访问没有事先建立好的键值对时,自动构建相应键值对以供访问,构建方法由参数default_factory决定。
既然源码说到了called
,那么在python
中的数据类型都有哪些呢?
参考文章:
想直接用字典也不是不可以,嘿嘿:
没有看明白的变态解法:
L = 10
bin = {'A': 0, 'C': 1, 'G': 2, 'T': 3}
class Solution:
def findRepeatedDnaSequences(self, s: str) -> List[str]:
n = len(s)
if n <= L:
return []
ans = []
x = 0
for ch in s[:L - 1]:
x = (x << 2) | bin[ch]
cnt = defaultdict(int)
for i in range(n - L + 1):
x = ((x << 2) | bin[s[i + L - 1]]) & ((1 << (L * 2)) - 1)
cnt[x] += 1
if cnt[x] == 2:
ans.append(s[i : i + L])
return ans
好的,今天的更新完毕,下次再见。