python一些操作的笔记

1、统计一个数组中元素出现个数,放入字典构成哈希表的方法:

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

2、字典,列表排序并取topk的值或者键

#列表排序
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)]

3、将字符串转为时间戳,可以比较大小

import datatime
time=datatime.datatime.strptime(str(20180910),"%Y%m%d")
#注意Y一定要大些,其他的小写

4、列表反转:

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())

5、list列表必须赋值之后才可以在赋值,如下

li=[]
直接 li[0]=1,这样按照索引赋值,会报错,所以需要按照以下方法初始化list;
li=[0 for i in range(n)]

6、进制转换,

指定位数的方法,比如32位,就给该数与0b1111…11(一共32个1)就可以了。例如,剑指offer第十题,求一个数的二进制中1的个数,下边一行代码即可。

# -*- coding:utf-8 -*-
class Solution:
    def NumberOf1(self, n):
        return bin(n&0b11111111111111111111111111111111).count('1')

7、动态规划专题

(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]

8、字符检测

li=“a”
li.isalpha()(返回true或者false)

9、strip()函数:

用于去掉字符串首尾指定的字符
str = "123abcrunoob321"
print (str.strip( '12' ))  # 字符序列为 12

10、创建多级字典

from collections import defaultdict
di=defaultdict(dict)
di["0"]="bc"
di["2"]="df"
di[1][2]="45"
#defaultdict(<class 'dict'>, {'0': 'bc', '2': 'df', 1: {2: '45'}})

11、过滤函数filter

filter(function,iterable)
# 其中function为函数,iterable为序列
x="ab.d\t!◆#,%"
dd = filter(lambda ch: ch not in ' \t◆#%', x)
print(list(dd))#['a', 'b', '.', 'd', '!', ',']

12、正则化分割函数

import re
x="ab.d\t!◆#,%"
ss=re.compile("[.,!]")
res=ss.split(x)
print(res)#['ab', 'd\t', '◆#', '%']

13、pandas中的Series和DataFrame

  1. Series介绍
    Pandas模块的数据结构主要有两:1、Series ;2、DataFrame 。(1)series是一个一维数组,是基于NumPy的ndarray结构。(2)DataFrame 是多为数组。Pandas会默 然用0到n-1来作为series的index,但也可以自己指定index(可以把 index理解为dict里面的key)。
  2. Series创建
      pd.Series([list],index=[list])
      参数为list;index为可选参数,若不填写则默认index从0开始;若填写则index长度应该与value长度相等。
  import pandas as pd
  s=pd.Series([1,2,3,4,5],index=['a','b','c','f','e'])
  print s

14、jieba关键词提取

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是一个生成器

14、list根据元素查找索引

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]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值