• 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

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

    #列表排序
    listSort=sorted(list,key=lambda x:x,reverse=False)
    #默认为升序排序
    
    • 1
    • 2
    • 3
    #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)]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

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

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

    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())
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

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

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

    6、进制转换,

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

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

    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    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    常规思路:(原理和动规差不多,也是用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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

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

    8、字符检测

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

    9、strip()函数:

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

    10、创建多级字典

    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'}})
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    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', '!', ',']
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    12、正则化分割函数

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

    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
    
    • 1
    • 2
    • 3

    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提取的关键词更加准确
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    12.1 jieba分词

    import jieba
    res=jieba.lcut("我爱中国共产党")#lcut调用了cut方法,cut是一个生成器
    
    • 1
    • 2

    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]

  • 相关阅读:
    编写函数实现简单的插值进入有序数组问题
    mybatis中使用@Column(name = “`group`“)失效
    vue3 + typescript 实操踩的坑
    C++-win32-SendMessage-最简单的进程间消息传递-消息钩子
    pycharm 断点调试python Flask
    基于映射序列码的自适应查询树防碰撞算法
    react高阶组件——HOC
    CV第三次上机 Pytorch+LeNet-5实现手写数字识别
    评:MD制裁芯片,信息产业要回“石器时代”
    使用VisualStudio2022制作安装包
  • 原文地址:https://blog.csdn.net/weixin_42726887/article/details/108445830