当前位置: 首页 > news >正文

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]

相关文章:

  • 4、乐趣国学—“行有不得,反求诸己。”
  • Github每日精选(第42期):web前端自定义Alert窗口sweetalert
  • “大厂”角力移动办公系统市场,钉钉和企微向左、WorkPlus向右
  • 面向有监督学习与文本数据的通用分类器
  • 为了学明白中断机制,我努力了
  • Python中的super函数,你熟吗?
  • 护眼灯频闪是什么意思?无频闪护眼灯哪个好
  • 「设计模式」六大原则之里氏替换原则小结
  • springboot+篮球场馆预约系统 毕业设计-附源码211706
  • vue实现【接口数据渲染随机显示】和【仅显示前五条数据】
  • JVM原理及优化_子系统
  • HTML——css与js案例练习
  • 吐血总结 50道Python面试题集锦
  • Python 实现 AI 拟声: 5秒内克隆您的声音并生成任意语音内容
  • 湖南工商大学------函数及其应用
  • 自己简单写的 事件订阅机制
  • [Vue CLI 3] 配置解析之 css.extract
  • [笔记] php常见简单功能及函数
  • Angular Elements 及其运作原理
  • emacs初体验
  • ES2017异步函数现已正式可用
  • java正则表式的使用
  • Linux链接文件
  • Mysql数据库的条件查询语句
  • Promise初体验
  • python 装饰器(一)
  • python_bomb----数据类型总结
  • 浮动相关
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 巧用 TypeScript (一)
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 数据仓库的几种建模方法
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • hi-nginx-1.3.4编译安装
  • RDS-Mysql 物理备份恢复到本地数据库上
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • #### go map 底层结构 ####
  • #1015 : KMP算法
  • $.ajax()方法详解
  • (12)Hive调优——count distinct去重优化
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (20050108)又读《平凡的世界》
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)springboot教学评价 毕业设计 641310
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .net中应用SQL缓存(实例使用)
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • @Not - Empty-Null-Blank
  • @param注解什么意思_9000字,通俗易懂的讲解下Java注解
  • @Validated和@Valid校验参数区别