• 算法乐园 主页 笔记 刷题




    python笔记

    pycharm常用快捷键

    ctrl+alt+s打开软件设置
    ctrl+d复制当前行代码
    shift+alt+上/下将当前行代码上移或下移
    ctrl+shift+f10运行当前代码文件
    shift+f6重命名文件
    ctrl+a全选
    ctrl+f搜索
    ctrl+alt+Lreformat code
    ctrl+alt+shift+Lreformat file
    ctrl+/注释选中行

    1print语句

    print()默认结尾换行,如果不需要换行可以添加end=''

    2.1字面量python六种数据类型

    image-20230703204741768

    2.2注释

    2.3变量

    2.4数据类型

    2.5数据类型转换

    语句(函数)说明
    int(x)将x转换为一个整数
    float(x)将x转换为一个浮点数
    str(x)将对象x转换为字符串

    万物皆可转字符串,只有字符串是数字时才能将字符串转数字

    2.6标识符

    标识符命名只允许出现:

    2.7运算符

    image-20230703215458152

    image-20230704075044254

    image-20230703215659037

    image-20230703215750236

    整除取整方向默认为

    Python 中一般以新行作为语句的结束标识,可以使用 \ 将一行语句分为多行显示。如下所示:

    如果包含在 []、{}、() 括号中,则不需要使用 \。如下所示:

    2.8字符串的三种定义方式

    单引号定义法,可以内含双引号

    双引号定义法,可以内含单引号

    可以用转义字符\解除引号的效用

    2.9字符串拼接

    2.10字符串格式化

    字符转ASCII和ASCII转字符串

    字符串的大小写转化

    2.11数字精度控制

    image-20230703224027306

    image-20230703224237500

    2.12字符串格式化的一种快速写法

    格式:f”内容{变量}”(不关心精度控制)

    2.15input语句

    input默认接受类型为string字符串

    3条件语句

    bool类型表示逻辑,True记作1,False记作0

    python中的与或非: and or not

    参考链接

    4.1循环语句while

    4.2循环语句for

    for 临时变量 in 序列类型:

    字符串和range语句生成的都是序列类型

    range(num)

    获得一个从0开始,到num结束的数字序列

    range(5)取得的数据是[0,1,2,3,4]

    range(num1,num2)

    获得从num1开始,到num2结束的数字序列(不含num2本身)

    range(5,10)取得的数据是[5,6,7,8,9]

    range(num1,num2,step)

    获得从num1开始,到num2结束的数字序列(不含num2本身)

    数字间的步长,以step为准(默认为1)

    例如,range(5,10,2)取得的数据为[5,7,9]

    reduce代替for循环

    reduce函数在python2中是个内置函数,在python3中被移到functools模块中。

    解释: 1+2+3+4+5=15

    作用:它用于对一个可迭代对象进行累积操作,将一个二元函数应用于序列的前两个元素,然后将结果与下一个元素继续应用该函数,直到序列中的所有元素都被处理完毕。

    5函数

    对于没有返回值的函数,返回值为None类型(也可以return None或return)

    在if判断中None等同于False

    None也可用于声明无初始内容的变量

    函数说明文档:

    注:函数内定义的变量在函数外是完全不可访问的

    函数外定义的全局变量函数内可以访问

    6.1 list数据容器-列表

    定义列表

    下标索引

    image-20230704110534622

    image-20230704110628855

    .index方法(由元素找到第一次出现的下标)

    列表.index(元素)

    Return first index of value. Raises ValueError if the value is not present.(报错)

    修改元素[]

    插入元素.insert()

    追加元素.append()

    追加其他容器.extend()

    删除指定下标处元素

    del 列表名[下标]列表名.pop(下标)

    找到并删除元素remove

    只删除从左到右的第一个

    清空列表.clear()

    统计元素数量.count()

    列表长度

    image-20230704125810615

    列表长度上限为2631=9223372036854775807

    遍历容器

    可以设置下标从哪个数开始

    拷贝容器.copy

    l1=l2是深拷贝,修改l2,l1会跟着改变

    l1-l2.copy()是浅拷贝,修改l2,l1不会跟着改变

    6.7 tuple数据容器-元组

    和list的区别是不可修改

    定义:

    (元素,元素,元素,......)

    空元组:变量名称=()

    变量名称=tuple()

    image-20230704140301050

    元组不可修改,但元组中的列表可以修改

    6.8string数据容器-字符串

    字符串可以通过下标进行访问

    同元组一样,字符串是一个无法修改的数据容器

    index方法

    .replace方法(替换)

    语法:字符串.replace(字符串1,字符串2)

    功能:将字符串内的全部: 字符串1,替换为字符串2

    注意:不是修改字符串本身,而是得到了一个新字符串

    .split方法(分割)

    语法:字符串.split(分隔符字符串)

    功能:按照指定的分隔符字符串,将字符串划分成多个字符串,并存入列表对象中

    注意:字符串本身不变,而是得到了一个列表对象

    .strip方法(规整字符串)

    image-20230704143727745

    .count方法统计字符串中某字符串出现的次数

    len统计字符串长度

    汇总

    image-20230704144414126

    Python 中常用处理字符串的相关函数

    原文链接

    string.capitalize() 把字符串的第一个字符大写 string.count(str, beg=0, end=len(string))返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数 string.endswith(obj, beg=0, end=len(string)) 检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False. string.find(str, beg=0, end=len(string))检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1 string.index(str, beg=0, end=len(string))跟find()方法一样,只不过如果str不在 string中会报一个异常. string.isalnum()如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False string.isalpha()如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False string.isdecimal()如果 string 只包含十进制数字则返回 True 否则返回 False. string.isdigit()如果 string 只包含数字则返回 True 否则返回 False. string.islower()如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False string.isnumeric()如果 string 中只包含数字字符,则返回 True,否则返回 False string.isspace() 如果 string 中只包含空格,则返回 True,否则返回 False. string.istitle()如果 string 是标题化的(见 title())则返回 True,否则返回 False string.isupper()如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False string.join(seq)以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串 string.lower() 转换 string 中所有大写字符为小写. string.lstrip()截掉 string 左边的空格 max(str)返回字符串 str 中最大的字母。 min(str) 返回字符串 str 中最小的字母。 string.replace(str1, str2, num=string.count(str1))把 string 中的 str1 替换成 str2,如果 num 指定,则替换不超过 num 次. string.split(str="", num=string.count(str))以 str 为分隔符切片 string,如果 num 有指定值,则仅分隔 num+ 个子字符串 string.startswith(obj, beg=0,end=len(string)) 检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查. string.strip([obj])在 string 上执行 lstrip()和 rstrip() string.swapcase()翻转 string 中的大小写 string.title()返回"标题化"的 string,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle()) string.translate(str, del="")根据 str 给出的表(包含 256 个字符)转换 string 的字符,要过滤掉的字符放到 del 参数中 string.upper() 转换 string 中的小写字母为大写

    6.10(取子序列)序列的切片

    序列:内容连续,有序,可使用下标索引的一类数据容器

    列表、元组、字符串均可以视为序列

    image-20230704145308052

    注意:此操作不会影响序列本身,而是会得到一个新的序列

    6.12set集合

    因为集合是无序的,所以不支持下标索引访问

    但是集合和列表一样,是允许修改的

    .add添加元素

    .remove移除元素

    .pop取出元素

    取出的过程对于字符串是随机的,即每次运行结果都不同

    .difference集合差集

    image-20230704163340854

    .difference_update集合的差集并更新左集合

    image-20230704163603047

    .union集合合并

    image-20230704163847187

    集合长度

    集合遍历

    集合不支持下标索引,所以不能用while循环遍历集合

    总结

    image-20230704164456346

    6.14 dict字典

    字典不允许键值重复

    key和value可以是任意数据类型,但key不能为字典(必须可哈希)

    []访问元素

    不可以使用下标索引,但可以根据key找到value

    []新增元素,更新元素

    image-20230704170925784

    dict不支持访问不存在的元素(以下是错误代码)

    .pop删除元素

    .clear清空元素

    .keys获取全部的key

    遍历容器

    方式1:通过key

    方式2:直接for循环

    len统计元素数量

    判断元素是否在容器内

    总结

    image-20230704173113950

    五类容器的总结

    image-20230704173413765

    image-20230704185950275

    image-20230704190147277

    万物皆可转列表(list)list{container}

    转tuple

    转string

    转set

    sorted通用排序功能

    sorted(容器,[reverse=True]) 返回一个list

    7.1函数多返回值

    7.2 函数的多种参数使用形式

    位置参数

    关键字参数

    缺省参数

    默认参数必须放在最后

    不定长参数

    位置传递

    关键字传递

    args -> arguments

    kwargs -> key word arguments

    7.3函数作为参数传递

    7.4 lambda匿名函数

    lambda 传入参数: 函数体(一行代码)


    9.4模块的概念和导入

    image-20230705103353164

    image-20230705103529040

    导入time模块后,就可以通过time.访问其中的内容(类,函数,变量)

    给模块起别名

    给函数起别名

    9.5自定义模块

    运行模块时会输出Hi, PyCharm

    在其他文件导入模块时,不会输出Hi, PyCharm

    image-20230721091434918

    9.6 自定义python包

    什么是Python包

    从物理上看,包就是一个文件夹,在该文件夹下包含了一个__init__.py 文件,该文件夹可用于包含多个模块文件

    从逻辑上看,包的本质依然是模块

    导入包

    方式一:

    导入: import 包名.模块名

    使用: 包名.模块名.目标函数

    方式二:

    导入: from 包名 import 模块名

    使用: 模块名.目标函数

    方式三:

    导入: from 包名.模块名 import 目标函数

    使用: 目标函数

    方式四:

    image-20230721093216149

    9.7安装第三方包

    什么是第三方包

    我们知道,包可以包含一堆的Python模块,而每个模块又内含许多的功能。

    所以,我们可以认为:一个包,就是一堆同类型功能的集合体。

    在Python程序的生态中,有许多非常多的第三方包(非Python官方),可以极大的帮助我们提高开发效率,如:

    这些第三方的包,极大的丰富了Python的生态,提高了开发效率。

    但是由于是第三方,所以Python没有内置,所以我们需要安装它们才可以导入使用哦。

    安装第三方包 -pip

    第三方包的安装非常简单,我们只需要使用Python内置的pip程序即可。

    打开我们许久未见的:命令提示符程序,在里面输入:

    pip install 包名称

    即可通过网络快速安装第三方包

    pip的网络优化

    由于pip是连接的国外的网站进行包的下载,所以有的时候会速度很慢。

    我们可以通过如下命令,让其连接国内的网站进行包的安装:

    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名称

     

    二.1.1类和对象

    image-20230706124337439

    image-20230706124628423

    (python不支持函数重载)

    1.4构造方法

    Python类可以使用:__init__()方法,称之为构造方法。

    可以实现:

    在创建类对象(构造类)的时候,会自动执行

    在创建类对象(构造类)的时候,将传入参数自动传递给__init__方法使用。

    这样写也是对的

    1.5魔术方法

    上文学习的__init__构造方法,是Python类内置的方法之一。

    这些内置的类方法,各自有各自特殊的功能,这些内置方法我们称之为:魔术方法

    __str__方法(类似重载cout)

    __lt__方法(类似重载‘<’,’>’)

    __lt__本质上是小于符号比较的(lower than),但它也能做到大于符号比较

    写该函数时,只需返回一个bool变量,表示用小于符号时为true的条件

    __le__方法(类似重载>=,<=)

    less equal

    __eq__方法(类似重载==,!=)

    equal

    代码略

    需要注意,对象自带比较==和!=的方法,当然只是比较内存地址是否相等

    1.6封装

    私有成员

    既然现实事物有不公开的属性和行为,那么作为现实事物在程序中映射的类,也应该支持。

    类中提供了私有成员的形式来支持。

    定义私有成员的方式非常简单,只需要:

    即可完成私有成员的设置

    1.8继承

    多继承:

    class 类名(父类1,父类2,...):

    括号内越靠左,优先级越高(存在同名方法时)

    复写

    子类继承父类的成员属性和成员方法后,如果对其“不满意”,那么可以进行复写。

    即:在子类中重新定义同名的属性或方法即可。

    调用父类同名成员

    一旦复写父类成员,那么类对象调用成员的时候,就会调用复写后的新成员

    如果需要使用被复写的父类的成员,需要特殊的调用方式:

    1.10变量的类型注解

    类型注解

    Python在3.5版本的时候引入了类型注解,以方便静态类型检查工具,IDE等第三方工具。

    类型注解:在代码中涉及数据交互的地方,提供数据类型的注解(显式的说明)。

    主要功能:帮助第三方IDE工具(如PyCharm)对代码进行类型推断,协助做代码提示

    帮助开发者自身对变量进行类型注释

    支持:

    image-20230721115848877

    image-20230721115923957

    image-20230721120105365

    按住需要用的函数和alt+enter可以自动搜索并导入包

    类型注解是提示性的,而不是决定性的,以下的代码不会报错

    对于函数:形参注释

    def 函数方法名(形参名: 类型, 形参名:类型, ...)->返回值类型:

    union用法:

    1.13多态

    话不多说,上代码

    numpy教程

    矩阵基础

    注意:矩阵必须满足所有行的元素个数相等,像b=np.array([[5,6,3,4],[2,4,7]])是不合法的

    dtype元素的类型

    定义矩阵时可以用dtype声明元素的类型,常见包括

    了解更多numpy的数据类型,请阅读

    zeros 全零矩阵

    ones 全一矩阵

    empty 元素都几乎接近0的矩阵

    arrange 某一区间的数列

    np.arrange(a,b,c)等价于matlab中的a:c:b

    reshape 改变矩阵形状

    linspace(开始,结尾,分几段)

    随机矩阵

    矩阵运算

    矩阵和标量的基本运算

    矩阵元素的判断

    元素乘法和矩阵乘法

    求和sum,最小值min,最大值max

    使用axis axis的意义是维度数

    min,max,mean也适用axis

    argmin,argmax矩阵中最小最大值的索引

    mean平均值 median中位数

    cumsum累加数组 diff数组差分

    sort排序每行

    矩阵转置

    clip(矩阵,矩阵中保留数的下限,矩阵中保留数的上限)

    矩阵索引

    下标从0开始算

    对于行向量,a[i]会取出下标为i的元素

    对于3行4列的矩阵,a[i]取出第i行

    利用冒号

    注意:取出来的都是行向量

    flat和flatten

    for循环遍历

    遍历所有元素

    矩阵的合并

    转置合并

    newaxis的使用

    newaxis用于增加维度

    concatenate矩阵拼接

    深浅拷贝

    等号复制是浅拷贝

    利用copy深拷贝

    pandas教程

    表格基础

    shape获取表格长度,返回元组(行数,列数)

    日期序列

    DataFrame生成表格

    利用index和columns设置表头

    采用默认的表头

    使用字典建立表格

    选择数据

    loc: select by label

    iloc: select by position

    bool判断

    修改指定位置的值

    修改符合条件的表格元素

    修改符合条件的行

     

    插入新的列

    处理丢失的数据

    dropna删除丢失的数据行列

    axis=0时删除含有nan的行

    axis=1时删除含有nan的列

    how=‘any’表示只要有nan就删除

    how=‘all’表示删除所有都是nan的行/列

    fillna给nan赋值 isnull返回对应布尔矩阵

    读写文件

    读文件:

    read_csv

    read_excel

    read_hdf

    read_sql

    read_json

    read_msgpack (experimental)

    read_html

    read_gbq (experimental)

    read_stata

    read_sas

    read_clipboard

    read_pickle

    写文件:

    to_csv

    to_excel

    to_hdf

    to_sql

    to_json

    to_msgpack (experimental)

    to_html

    to_gbq (experimental)

    to_stata

    to_clipboard

    to_pickle

    测试文件下载:

    students.xlsx

    students.csv

    读取csv

    读取excel

    参考文献

    输出excel

    示例一:

    示例文件students.xlsx

    concat拼接

    如果不写ignore_index=True,即默认ignore_index=False, 拼接的结果为

    拼接表头不同的列

    如果拼接表头不同的列,如下例子所示

    axis=0时对列操作,在列的方向上拼接;axis=1时对行操作,在行的方向上拼接

    join=outer时,会去除因为拼接错位而产生的含有NaN的行/列

    merge拼接

    考虑多个key

    how = ['left', 'right', 'outer', 'inner']

    inner:必须所有key相同才保留

    outer:不要求所有key相同,可能会产生含有NaN的行

    left和right是使用到的两组数据名,可以以被选择的数据作为模板进行合并

    使用indicator

    left_index和right_index合并

    合并行index

    suffixes处理会重复的列