for i in nums:
dic[i]=dic.get(i,0)+1
#这里的dic.get(i,0)=0,这里需要几就在括号参数里写几,这里需要对每一个数,从0统计,所以参数是0
#方法2:常规思路
for i in nums:
if i in dic:
dic[i]+=1
else:
dic[i]=1
#列表排序
listSort=sorted(list,key=lambda x:x,reverse=False)
#默认为升序排序
#1、按照键排序
#排序之后返回的是list
keySort=sorted(dic.items(),key=lambda kv:(kv[0],kv[1]),reverse=False)
#2、按照值排序
valueSort=sorted(dic.items(),key=lambda kv:(kv[1],kv[0]),reverse=False)
#3、这里(kv[0],kv[1])表示按照键排序,如果是(kv[1],kv[0])就是按照值排序,
#4、后边的参数默认是false,即默认升序排序,reverse=True,就是降序排序
#5、对于dic的排序结果取前k个方法
#假设keySort=[(1,4),(5,3),(6,1)]
#(1)取键
[keySort[i][0] for i in range(k)]
#(2)取值
[valueSort[i][1] for i in range(k)]
import datatime
time=datatime.datatime.strptime(str(20180910),"%Y%m%d")
#注意Y一定要大些,其他的小写
li=[1,2,3,4]
#(1)、直接调用list的reverse方法,他的返回值为None,所以不用接收,调用之后直接打印输出即可。
li.reverse()
print(li)#[4,3,2,1]
#(2)、li[::-1]就可以实现,反向每个字符反转。
li[::-1]
#(3)一个弹栈,一个入栈。
li2=[]
while li:
li2.append(li.pop())
li=[]
直接 li[0]=1,这样按照索引赋值,会报错,所以需要按照以下方法初始化list;
li=[0 for i in range(n)]
指定位数的方法,比如32位,就给该数与0b1111…11(一共32个1)就可以了。例如,剑指offer第十题,求一个数的二进制中1的个数,下边一行代码即可。
# -*- coding:utf-8 -*-
class Solution:
def NumberOf1(self, n):
return bin(n&0b11111111111111111111111111111111).count('1')
(1)最大连续字串的和。(剑指offer30)
状态转移函数:dp[i]=max(arr[i],dp[i-1]+arr[i])
class Solution:
def FindGreatestSumOfSubArray(self, array):
# write code here
leng=len(array)
dp=[0 for i in range(leng+1)]
res=array[0]
dp[0]=0
#dp[i]表示i之前最大和
for i in range(1,leng+1):
dp[i]=max(array[i-1],dp[i-1]+array[i-1])##这就是dp[0, 1, 3, 0, 2, 5],当输入为[1,2,-3,2,3]
res=max(res,dp[i])
return res
常规思路:(原理和动规差不多,也是用temp暂时保存最大和)
class Solution:
def FindGreatestSumOfSubArray(self, array):
# write code here
#常规思路
res=array[0]
temp=0
for i in array:
if temp+i<0:
temp=0#如果遇见小于0,就从头开始
else:
temp+=i
res=max(res,temp)
if temp!=0:#可能是全负数
return res
return max(array)
(2)最长回文子串
在两边的头尾字符相等的情况下,如果里边的子串是回文子串,则整体是回文串,否则就不是。
【状态】定义为:原字符串的一个子串是不是回文子串。
dp[i][j]表示的是子串s[i…j]是否为回文子串,s[i]和s[j]都可以取到
反向思考,一个回文子串,去掉头部和尾部的字符,仍然是回文子串,所以当子串长度大于2时,有以下的状态转移方程
dp[i][j]=dp[i+1][j-1]and s[i]==s[j]
li=“a”
li.isalpha()(返回true或者false)
用于去掉字符串首尾指定的字符
str = "123abcrunoob321"
print (str.strip( '12' )) # 字符序列为 12
from collections import defaultdict
di=defaultdict(dict)
di["0"]="bc"
di["2"]="df"
di[1][2]="45"
#defaultdict(, {'0': 'bc', '2': 'df', 1: {2: '45'}})
filter(function,iterable)
# 其中function为函数,iterable为序列
x="ab.d\t!◆#,%"
dd = filter(lambda ch: ch not in ' \t◆#%', x)
print(list(dd))#['a', 'b', '.', 'd', '!', ',']
import re
x="ab.d\t!◆#,%"
ss=re.compile("[.,!]")
res=ss.split(x)
print(res)#['ab', 'd\t', '◆#', '%']
import pandas as pd
s=pd.Series([1,2,3,4,5],index=['a','b','c','f','e'])
print s
import jieba.analyse
jieba_tag=jieba.analyse.extract_tags(sentence=text,topK=5,withWeight=True,allowPOS=(),withFlag=True)#allowPOS词性过滤,空的表示不过滤
#这里关键词提取是基于TF-IDF
jieba_tags=jieba.analyse.textrank(sentence=text,withWeight=True,withFlag=True)#这里是根据textrank提取关键词
tags=jieba.analyse.extract_tags(sentence=text,withWeight=True,withFlag=True)#这是更具TfIDF提取关键词,
#实验表明,tfidf提取的关键词更加准确
12.1 jieba分词
import jieba
res=jieba.lcut("我爱中国共产党")#lcut调用了cut方法,cut是一个生成器
a=[1,2,3]
a.index(2)=1
14、返回list中所有对应元素的索引
a=[1,2,3,4,3,2,3]
a.index(3)=2
[i,for i ,x in enumerate(a) if x ==3]