欢迎光临散文网 会员登陆 & 注册

耗时600小时整理《Python教程全套》完全入门版,分享一起学习_高清附字幕

2021-08-01 16:57 作者:水母山楂  | 我要投稿

〇、前言

1. 关于笔记

笔记从WPS复制到B站的,没有文字大小和颜色

笔记中前面带#的是注释内容

目前已完结(P6-P169)

因为B站笔记只能记20000字,这里的笔记从原笔记删去近一半内容。几乎没有示例内容,没有二十四章、函数及以后内容

关于WPS笔记和一些其他内容,可以通过下面的百度网盘链接下载

https://pan.baidu.com/s/1fTwjyoM81_OOAccPNhGE9Q?pwd=h3fg

笔记中如果有错误的地方欢迎在评论区指正

2. 关于扩展

2.1. 扩展大多数只扩展基本概念和用法

2.2. 一部分注释也可以当做扩展

2.3. 关于扩展的内容

部分内容转摘或摘编自以下网站:

菜鸟教程:https://www.runoob.com/

C语言中文网:http://c.biancheng.net/

部分内容来源网络、来源视频或自我理解


一、输出函数print()

1. print()函数输出内容

数字

字符串

含有运算符的表达式

2. print()函数输出目的地

显示器

文件

3. print()函数输出形式

换行

不换行

4. 补充

a+的含义:如果文件不存在就创建,存在就在文件内容的后面继续追加

内置函数:不需要前面加任何前缀,直接可以使用的函数


二、转义字符与原字符

(1)、转义字符

1. 组成

反斜杠(\)+想要实现的转义功能首字母

2. 作用

2.1. 当字符串中包含反斜杠(\)、单引号和双引号(' ")等有特殊用途的字符时、必须使用反斜杠(\)进行转义(转换一个含义)

示例:

反斜杠:\\

单引号:\'

双引号:\"

2.2. 当字符串中包含换行、回车、水平制表位或退格等无法直接表示的特殊字符时,也可以使用转义字符

示例:

换行:\n (newline)

回车:\r (return)

水平制表位:\t (tab)

# \t占4个字符的位置

退格:\b (back space)

(2)、原字符

1. 含义

不希望字符串中的转义字符起作用,让转义字符不起作用的叫原字符

2. 使用

在字符串之前加上r或R

示例:

print(r'hello\nworld')

print(R'hello\nworld')

3. 注意事项

最后一个字符不能是反斜杠(\)

示例:

错误示范:print(r'hello\nworld\')

正确示范:print(r'hello\nworld\\')


三、二进制与字符编码

(1)、二进制

1. 计算机换算单位

8位(8bit)->1字节(1byte)  # 8位指8个位置

1024字节(1024byte)->1千字节(1KB)

1024千字节(1024KB)->1兆字节(1MB)

1024兆字节(1024MB)->1吉字节(1GB)

1024吉字节(1024GB)->1太字节(1TB)

扩展:

1024太字节(1024TB)->1拍字节(1PB)

1024拍字节(1024PB)->1艾字节(1EB)

位(bit)<字节(byte)<千字节(KB)<兆字节(MB)<吉字节(千兆字节GB)<太字节(TB)<拍字节(PB)<艾字节(EB)

2. 二进制的转换

2.1. 什么是位

在计算机中的二进制数系统中,每个0或1就是一个位(bit)

2.2. 8位

二位用0和1组合可表示4种状态,八位用0和1组合可以表示256种状态(28),八位的256种状态对应现实生活中的256种符号(ASCII码表)

2.3. 十进制的转换

使用电脑上的计算器(或在运行里输入calc),在查看里点击程序员型

2.4. 使用python进行字符转换

二进制转字符:

print(chr(0b二进制))

字符转十进制:

print(ord('字符'))

(2)、字符编码

1. 二进制与字符编码

二进制0和1->ASCII码表

    ->GB2312(80后)->GBK(90后)->GB18030(00后)

# 80后只能表示简体中文,90后能表示繁体中文,00后能表示少数民族文字

    ->其他国家的字符编码

——>(统一)Unicode(中英都用2个字节)->UTF-8(中文3个字节,英文1个字节)

2. 字符的表示

字符可以用二进制、八进制、十进制或十六进制表示,但最终到计算机会变成二进制,因为计算机只识别二进制


四、Python中的标识符和保留字

(1)、保留字

1. 什么是保留字

有些单词被python赋予特定的意义,这些单词在给python文件命名或给变量起名时不允许使用

2. 保留字有哪些

在python中输入:

import keyword

print(keyword.kwlist)

可以查询所有保留字

保留字列表:

['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

(2)、标识符

1. 什么是标识符

在给变量、函数、类、模块和其他对象起名字的名字就叫标识符(需要你自己命名字的)

2. 标识符的规则

可以使用字母、数字、下划线

不可以使用数字开头

不可以使用保留字

严格区分大小写

# Python3中可以使用汉字作为标识符,但不建议使用或避免使用


五、变量的定义和使用

1. 定义

可以改变的量

2. 使用

变量名(标识符)+赋值运算符+值

3. 组成

# obj->对象

标识:表示对象所储存的内存地址,使用内置函数id(obj)来获取

类型:表示对象的数据类型,使用内置函数type(obj)来获取

值:表示对象所储存的具体数据,使用print(obj)可以将值进行打印输出


六、变量的多次赋值

1. 什么是多次赋值

多次赋值指给一个变量多次赋值

2. 多次赋值的结果

当多次赋值之后,变量名会指向新的空间


七、数据中常见的数据类型

(1)、整数类型(int)

1. 表示

表示正数、负数和零

表示进制:

十进制->默认的进制

二进制->以0b开头

八进制->以0o开头

十六进制->以0x开头

(2)、浮点数类型(float)

1. 组成

浮点数是由整数部分和小数部分组成

2. 问题

浮点数储存不精确,原因是计算机是使用二进制存储的,所以在存储浮点数时不精确

# 不是所有浮点数计算都有问题

3. 解决办法

通过导入模块decimal来解决浮点数的问题

(3)、布尔类型(bool)

1. 表示

表示真或假的值

True表示真,False表示假


布尔值可以转化为整数

True->1 False->0

(4)、字符串类型(str)

1. 定义

· 字符串又被称为不可变的字符序列

· 可以使用单引号''双引号''''三引号''''''或""""""来定义

· 单引号和双引号定义的字符串必须在一行

· 三引号定义的字符串可以分布在连续的多行


八、数据类型转换

(1)、为什么需要数据类型转换

将不同数据类型的数据拼接在一起

(2)、str()函数与int()函数

1. 不同类型进行连接时报错

str与int连接时会报错

2. 解决方案

2.1. 将其他数据类型转成字符串类型:str()函数

2.2. 将其他数据类型转成整数类型:int()函数

(3)、float()函数

1. 作用

将其他数据类型转成浮点数类型

2. 注意事项

· 文字类无法转成整数

· 整数转成浮点数,末尾为“.0”


(4)、总结

将其他数据转成字符串

str()

将其他数据转成整数

int()

将其他数据转成浮点数

float()

扩展:

将其他数据转成布尔值

bool()  # 值是True或False,具体在“十三、对象的布尔值”会讲


九、Python中的注释

1. 注释是什么

· 在代码中对代码的功能进行解释说明的标注性文字,可以提高代码的可读性

· 注释内容会被Python解释器忽略

2. 注释的类型

2.1. 单行注释

以“#”开头,直到换行结束

示例:

# 单行注释

2.2. 多行注释

并没有单独的多行注释标记,将一对三引号(''''''或"""""")之间的代码称为多行注释

示例:

'''多行

注释'''

"""多行

注释"""

2.3. 中文编码声明注释

在文件开头加上中文声明注释,用以指定源码文件的编码格式

python中默认的存储编码是UTF-8

更改:

在前面写上一句代码

# coding:编码

示例:

# coding:utf-8


十、input()函数

(1)、input()函数的基本使用

1. 作用

接收来自用户的输入

2. 使用

变量+赋值运算符+input(提问)

# 提问是在输入之前程序给你的一个提示语,根据提示语输入一个数据

(2)、input()函数的高级使用

录入两个整数,计算两个整数的和

a = input('请输入第一个加数')

b = input('请输入第二个加数')

方法1:

print(int(a)+int(b))

方法2:

a = int(a)

b = int(b)

print(a+b)

运行结果:

请输入第一个加数100

请输入第二个加数200

300


十一、Python中常用的运算符

(1)、算术运算符

1. 标准算术运算符

加(+)、减(-)、乘(*)、除(/)、整除(//)

# 整除是指两个数相除,结果为向下取整

2. 取余运算符(取模运算)

%  # 取模,返回两个数相除的余数

3. 幂运算符

**

4. 一正一负的整除和取余

4.1. 整除时结果向下取整


4.2. 取余时要公式:余数=被除数-除数*商

(2)、赋值运算符(=)

1. 执行顺序

从右到左

2. 支持内容

2.1. 支持链式赋值:a = b = c = 10

# 实际只有一个整数对象,却有三个引用

2.2. 支持参数赋值:+=、-=、*=、/=、//=、%=

2.3. 支持系列解包赋值:a, b, c = 1, 10, 100

# 等号左右两边的个数要相同

# 实际上为将100赋值给c,10赋值给b,1赋值给a

交换两个变量的值:

a, b = b, a

(3)、比较运算符

1. 作用

对变量或表达式的结果进行大小、真假等比较,结果为布尔类型bool(True,False)

2. 比较运算符(比较值value)

>:大于

<:小于

>=:大于等于

<=:小于等于

!=:不等于  # 不等于为True,等于为False

==:等于  # ==比较的是值(value)

# 一个等号为赋值运算符,两个等号为比较运算符

3. 比较运算符(比较标识id)

is:是

is not:不是


(4)、布尔运算符

1. 作用

对布尔值(True,False)之间进行运算

2. 布尔运算符

and:当两个运算数都为True才为True,其余为False

or:当两个运算数都为False才为False,其余为True

not:如果运算数为True/False,运算结果为False/True

in:如果x在x里面为True,反之False

not in:如果x不在x里面为True,反之False

(5)、位运算符

1. 作用

将数据转成二进制进行计算

2. 位运算符

按位与(&):对应数位都是1,结果数位为1,否则为0

按位或(|):对应数位都是0,结果数位为0,否则为1

左移位(<<):高位溢出舍弃,低位补0

右移位(>>):低位溢出舍弃,高位补0

(6)、运算符的优先级

1. 优先级

算术运算【(**)->(*,/,//,%)->(+,-)】

->位运算【(<<,>>)->(&)->(|)】

->比较运算【(>,<,>=,<=,==,!=)】

->布尔运算【(and)->(or)】

->赋值运算符【(=)】

2. 有括号()

有括号的时候会先计算括号中的内容


十二、程序的组织结构

1. 顺序结构

程序从上到下顺序地执行代码,中间没有任何的判断和跳转,直到程序结束

2. 分支结构(选择结构)

3. 循环结构

# 分支结构(选择结构)和循环结构后面会说


十三、对象的布尔值

1. 对象

Python中一切皆对象,所有对象都有一个布尔值(True,False)

2. 获取对象的布尔值

使用内置函数bool()

3. 布尔值为False的对象

False

数值0

None

空字符串

空列表

空元组

空字典

空集合

# 除以上的对象,其他对象的布尔值都为True


十四、分支结构(选择结构)

(1)、单分支结构

1. 什么是分支结构(选择结构)

程序根据判断条件的布尔值选择性地执行部分代码,明确的让计算机知道在什么条件下,该去做什么

2. 单分支结构的语法

中文语义:如果......就......

语法结构:

if 条件表达式:

    条件执行体

# 如果条件表达式为True就执行条件执行体,如果为False就不执行

(2)、双分支结构

1. 中文语义

如果......不满足......就......

示例:

如果n>1为True,不是就为False

2. 语法结构

if 条件表达式:

    条件执行体1

else:

    条件执行体2

# 如果条件表达式为True就执行条件执行体1,如果为False就执行条件执行体2

(3)、多分支结构

1. 中文语义

是...... 不是

是...... 不是

......

是...... 是

2. 语法结构

if 条件表达式1:  # 注意冒号

    条件执行体1

elif 条件表达式2:  # elif是else和if的简写

    条件执行体2

elif 条件表达式N:

    条件执行体N

else:

条件执行体N+1

# 如果条件表达式1为True就执行条件执行体1,后续的不作判断。如果为False就判断条件表达式2,以此类推

扩展:elif与if的区别:

if判断完条件表达式1后,后续的继续判断

elif判断完条件表达式1后,后续的不作判断

两者判断条件表达式都为False才会执行else的语句


(4)、嵌套if的使用

1. 语法结构

if 条件表达式1:

if 内层条件表达式:

内存条件执行体1

else:

内存条件执行体2

else:

条件执行体

# 红色的是一对,称为Y分支结构。蓝色的是一组,蓝色的是给红色if为Ture的时候去做的一个条件执行体

(5)、条件表达式

1. 什么是条件表达式

条件表达式是if......else的简写  # 用于简化代码

2. 语法结构

x if 判断条件 else y  # 这里空格随意,但至少空一格

3. 运算规则

如果判断条件的布尔值为True,条件表达式的返回值为x。否则条件表达式的返回值为False


十五、pass语句

1. 作用

pass语句什么都不做,只是一个占位符,用在语法上需要语句的地方

2. 什么时候用

在搭建语法结构时,还没想好代码怎么写的时候使用

3. 跟那些语句一起使用

if语句的条件执行体

for-in语句的循环体

定义函数时的函数体


十六、range()函数的使用

1. 作用

用于生成一个整数序列出 # 序列指的是被排成一列的对象

2. 创建range对象的三种方式

2.1. range(stop):创建一个[0,stop)之间的整数序列,步长为1

2.2. range(start,stop):创建一个[start,stop)之间的整数序列,步长为1

2.3. range(start,stop,step):创建一个[start,stop)之间的整数序列,步长为step

# [指的是大/小于等于,(指的是大/小于,所以在这个整数序列中包含start但不包含stop,也就是半开半闭区间。步长指的是相邻的两个数相差多少,默认为1。start、stop和step必须为整数。

3. in与not in

可以使用in与not in判断整数序列中是否存在(不存在)指定的整数

4. range类型的优点

不管range对象表示的整数序列有多长,所有range对象占用的内存空间都是相同的,因为只需要存储start、stop和step,只有当用到range对象时,才会去计算序列中的相关元素


十七、循环结构

(1)、循环

反复做同一件事情的情况,称为循环

(2)、while循环

1. 语法结构

while 条件表达式:

    条件执行体(循环体)

# 如果条件表达式的值为True,就执行条件执行体,然后继续判断条件表达式。如果为Fasle就结束循环

2. if与while的区别

if只判断一次,条件为True执行一行

while判断N+1次,条件为True执行N次

3. 四步循环法

· 初始化变量

· 条件判断

· 条件执行体(循环体)

· 改变变量

(3)、for-in循环

1. in

in表达从(字符串、序列等)中依次取值,又称为遍历

for-in遍历的对象必须是可迭代对象

# 目前已学的当中,只有两个可迭代对象:字符串与序列

2. 语法结构

for 自定义的变量 in 可迭代对象:

循环体

# 每一次循环取一个值,依次取值,直到结束

# 如果不需要自定义变量,可将自定义变量写为下划线_


十八、流程控制语句

(1)、break语句

1. 作用

用于结束循环结构,通常与分支结构if一起使用

# 执行到break会跳出循环,叫做非正常结束循环

2. 示意图

2.1. for-in:

2.2. while:

(2)、continue语句

1. 作用

用于结束当前循环,进入下一次循环,通常与分支结构中的if一起使用

2. 示意图

2.1. for-in:


2.2. while:

(3)、else语句

1. else语句配合使用的两种情况

1.1. 与if配合使用:if条件表达式不成立时执行else

1.2. 与while或for-in配合使用:没有碰到流程控制语句时执行else

# 第二种情况也可以不用else,直接在后面写


# 以下内容属于"十七、循环结构"

(4)、嵌套循环

1. 什么是嵌套循环

循环结构中又嵌套了另外的完整的循环结构,其中内层循环做为外层循环的循环的循环体执行

# 在循环中执行循环

扩展:

end='\t'

print()函数默认是end='\n'(末尾换行)。end='\t'把末尾改为TAB,从而使不换行。同样也可以改为end=' ',使末尾加一个空格字符,也不会换行。

(5)、二重循环中的break与continue

二层循环中的break和continue用于控制本层循环

# 内层循环中的break和continue不影响外层循环的继续执行


十九、列表

(1)、为什么需要列表

1. 存储

变量可以存储一个元素(对象),列表可以存储N多个元素(对象),程序可以方便地对这些数据进行整体操作

2. 在其他语言中

列表相当于其他语言中的数组

(2)、列表对象的创建

1. 使用中括号创建

列表对象名+赋值号+中括号  # 元素之间使用英文的逗号进行分隔

示例:

A = [1, 2.0, '3']

2. 调用内置函数list()

list([])

示例:

A = list([1, 2.0, '3'])

3. 空列表

创建一个空列表

列表对象名=[]

列表对象名=list()

(3)、列表的特点

1. 列表元素按顺序有序排序

列表中每个元素有序排序,不会无序排序

2. 索引映射唯一一个数据

列表中每个元素通过索引去获取,索引从0开始(从前往后),或从-1开始(从后往前),通过索引可定位唯一一个元素

3. 列表可以存储重复数据

列表可以存储重复的数据,不论多少个

4. 任意数据类型可以混存

列表可以存储不同的数据类型,具有更大的包容性

5. 根据需要动态分配和回收内存

无论存多少个元素,都会根据多少动态分配内存空间

(4)、列表元素的查询操作

1. 获取列表中指定元素的索引

使用index()来获取:列表名.index(元素)

1.1. 如查列表中存在N个相同元素,只返回相同元素中的第一个元素的索引

1.2. 如查询的元素在列表中不存在,则会抛出ValueError

1.3. 还可以在指定的start和stop之间进行查找(在指定范围查找)

# index(元素,start,stop) 不包括stop

2. 获取列表中的单个元素

列表名[]

2.1. 正向索引

从0到N-1  # N为元素的个数

2.2. 逆向索引

从-N到-1

2.3. 指定索引不存在

抛出IndexError

3. 获取列表中的多个元素(切片操作)

3.1. 语法格式

列表名[start:stop:step]

# 关于strat,stop和step到十六、range()函数的使用查看

# 切片在列表的增加操作、删除操作与修改操作也有涉及

3.2. 切片的结果

原列表片段的拷贝  # 新切出来的是一个新的列表对象

3.3. 切片的范围

[strat,stop)

3.4. 切片中的step

step默认为1  # 简写为[start:stop]

3.4.1. step为正数:

[:stop:step]

strat不写,切片的第一个元素默认是列表的第一个元素

[strat::step]

stop不写,切片的最后一个元素默认是列表的最后一个元素

# 以上都是从start开始往后计算切片的

3.4.2. step为负数:

[:stop:step]

strat不写,切片的第一个元素默认是列表的最后一个元素

[strat::step]

stop不写,切片的最后一个元素默认是列表的第一个元素

# 以上都是从start开始往前计算切片的,而且不包括stop

4. 判断指定元素在列表中是否存在

使用in或not in:

元素 in 列表名

元素 not in 列表名

5. 列表元素的遍历

使用for-in循环:

for 自定义变量 in 列表名(可迭代对象):

    操作

(5)、列表元素的增加操作

# 以下操作是在原列表的基础上增加元素,不会产生新的列表对象

1. append()

在列表的末尾添加一个元素

列表名.append(元素)

2. extend()

在列表的末尾添加至少一个元素

列表名.extend(元素)

3. append与extend的区别

append是向末尾只添加一个元素,而extend是向末尾添加多个元素

4. insert()

在列表的任意位置添加一个元素

列表名.insert(索引,元素)

5. 切片

在列表的任意位置添加至少一个元素

列表名[start:stop:step]=元素  # 不包括stop

6. insert与切片的区别

insert是只向任意位置添加一个元素,而切片是切掉一部分元素换成另外一部分元素

(6)、列表元素的删除操作

1. remove()

· 一次删除一个元素

· 重复元素只删除第一个

· 元素不存在抛出ValueError

· 不会产生新的列表对象

列表名.remove(元素)

2. pop()

· 删除一个指定索引位置上的元素

· 指定索引不存在抛出IndexError

· 不指定索引,删除列表中最后一个元素

· 不会产生新的列表对象

列表名.pop(索引)

3. 切片

· 一次至少删除一个元素

· 会产生新的列表对象,原列表不会改变

· 用[](空列表)进行替掉时,不产生新的列表对象,而是删除原列表中的内容

新列表名=原列表名[start:stop:step]

原列表名[start:stop:step]=[]


4. clear()与del

clear是清除列表,将列表中的元素清除掉

列表名.clear()

del是删除列表,会删除整个列表对象

del 列表名

(7)、列表元素的修改操作

1. 指定索引的元素赋予一个新值

列表名[索引]=元素(新值)

2. 指定的切片赋予一个新值

列表名[start:stop:step]=元素(新值)

# 这里的start、stop和step与前面切片操作相同


(8)、列表元素的排序操作

对列表当中的元素进行由小到大,或由大到小的一个排序操作

常见的两种方式:

1. 调用sort()方法

对列表中的所有元素默认按照从小到大的顺序进行排序

列表名.sort()

2. 调用内置函数sorted()

对列表中的所有元素默认按照从小到大的顺序进行排序,原列表不发生改变,会产生新的列表对象

sorted(列表名)

3. reverse

· 可以指定reverse=True来进行降序排序

· reverse默认为False,为升序排序

列表名.sort(reverse=True)

sorted(列表名,reverse=True)

4. 注意事项

int类型与str类型,str类型与bool类型之间不能进行排序

(9)、列表生成式

1. 什么是列表生成式

生成列表的一个公式的简称

2. 语法格式

[i*i for i in range(1,10)]

[表示列表元素的表达式 for 自定义变量 in 可迭代对象]

# “表示列表元素的表达式”中通常包含“自定义变量”


二十、字典

(1)、什么是字典

1. 字典

· 字典是Python内置的数据结构之一,与列表一样是一个可变序列

# 可变序列指数据结构可执行增删改操作

· 字典是由花括号{}定义的

· 以键值对(键:值)的方式存储数据,字典是一个无序(无顺序排列)的序列

# 键值对指的是一对一对存储的元素

字典名={键:值,键:值......}

2. 字典示意文本

hash(key3) key3->value3

hash(key4) key4->value4

 

hash(key1) key1->value1

hash(key5) key5->value5

hash(key2) key2->value2

# key1,2,3,4,5指的是第几个放入字典中的键

# 字典是无序的序列,因为要经过hash函数的工序(->把键放在hash函数之中去计算(计算:你要进行存储的位置)),所以键的位置是通过hash函数计算得来的

# 因为是hash函数计算得来的,所以要求放在字典中的键必须是一个不可变序列(创建之后不可修改),否则具有不确定因素(键改变),例如整数序列和字符串就是不可变序列

(2)、字典的实现原理

字典的实现原理与查字典类似,Python中的字典是根据key查找value所在的位置

# hash函数类似查字典时的找部首和算笔画

(3)、字典的创建

1. 使用花括号创建

字典名={键:值,键:值......}

2. 使用内置函数dict()创建

dict(键=值,键=值......)

# 这里的键由于是赋值形式,所以左侧的键不加任何符号

3. 空字典

创建一个空字典

字典名={}

字典名=dict()

# 相同的键会变成一个,也就是不能重复

(4)、字典的常用操作

1. 字典中元素的获取

1.1. []

字典名[键]

1.2. get()方法

字典名.get(键)

1.3. []与get()的区别

如果查找的键不存在,[]会报错(KeyError),get()不会报错,会输出一个None,如果指定了默认值,就会在键值不存在时返回默认值

字典名.get(键,默认值)

2. 字典元素的增删改以及判断操作

2.1. key的判断

使用in或not in判断指定的键在字典中是否存在

键 in 字典名/键 not in 字典名

2.2. 字典元素的删除

使用del语句删除指定的键值对

del 字典名[键]

# 同样可以用clear清空字典的元素与del删除字典:字典名.clear(),del 字典名

# 也可以使用 字典名.pop(键) 与del的区别是pop有返回值,del直接删除

2.3. 字典元素的新增和修改

字典名[键]=值

3. 获取字典视图

3.1. keys()

获取字典中所有key,数据类型为dict_keys

字典名.keys()

3.2. values()

获取字典中所有value,数据类型为dict_values

字典名.values()

3.3. items()

获取字典中所有key,value对,数据类型为dict_items

字典名.items()

# items()获取的键值对是元组形式的

# 可以使用list函数将字典视图转为列表

4. 字典元素的遍历

for item in 字典名:

    print(item)

# item(自定义变量)获取的是字典当中的键,如果要获取值,可以使用 字典名[item] 或 字典名.get(item)


(5)、字典的特点

· 字典中的所有元素都是一个key-value对(键值对),key不允许重复,重复将会覆盖,value可以重复

· 字典中的元素是无序的

· 字典中的key必须是不可变对象

· 字典也可以根据需要动态地伸缩,内存随着元素的加或减而加或减

· 字典会浪费较大的内存,但查询速度快,是一种使用空间换时间的数据结构

(6)、字典生成式

1. 内置函数zip()

用于将可迭代的对象作为参数,将对象中对应的元素打包成一个元组,然后返回由这些元组组成的列表,返回的元素个数以少的那个为基准

2. 字典生成式

将两个列表中的第一个(items)作为字典中的key,第二个(prices)作为字典中的value

{表示字典key的表达式:表示字典value的表达式 for 自定义表示key的变量,自定义表示value的变量 in zip(可迭代对象,可迭代对象)}

{item.upper():price for item,price in zip(items,prices)}


二十一、元组

(1)、什么是元组

1. 元组

元组是Python内置的数据结构之一,是一个不可变序列

元组名=(元素对象,元素对象,元组对象......)

2. 不可变序列与可变序列

不可变序列:字符串、元组等,没有增、删、改操作

可变序列:列表、字典等,可以对序列执行增、删、改操作,对象地址不发生更改

(2)、元组的创建方式

1. 创建方式

1.1. 直接使用小括号()

元组名=(元素对象,元素对象,元组对象......)

1.2. 使用内置函数tuple()

元组名=tuple((元素对象,元素对象,元组对象......))

# 如果是单层括号,里面要是可迭代对象(列表、元组、字典、字符串):

元组名=tuple(可迭代对象)

1.3. 空元组

创建一个空元组

元组名=()

元组名=tuple()

2. 注意事项

如果元组当中只包含一个元素,需要使用逗号和小括号(如果没逗号会被认为是本身的数据类型)

元组名=(元素对象,)

3. 关于元组的索引与切片

元组也有索引与切片,其用法与列表相同,用于获取元素或索引


(3)、元组为什么要设计成不可变序列

1. 原因

· 避免由于修改数据而导致出错

· 在多任务环境下,同时操作对象时不需要加锁

# 多个操作同时进行,不需要依次进行

· 因此,在程序中尽量使用不可变序列

2. 注意事项

元组中存储的是对象的引用

· 如果元组中对象是不可变对象,则不能再引用其它对象

· 如果元组中对象是可变对象,则可变对象的引用不允许改变,但数据可以改变

(4)、元组的遍历

元组是可迭代对象,所以可以使用for...in进行遍历

for item in 元组名:

print(item)

# item是自定义变量


二十二、集合

集合的概述与创建

1. 集合的概述

· Python语言提供的内置数据结构

· 与列表、字典一样都属于可变类型的序列

· 集合是没有value的字典,所以集合也是一个无序的序列

· 集合也是由花括号{}定义的

2. 示意文本

hash(dataE)->dataE

hash(dataB)->dataB

 

hash(dataA)->dataA

hash(dataC)->dataC

hash(dataD)->dataD

# ABCDE是向集合中添加元素的顺序,同样也是hash函数计算位置

3. 集合的创建

3.1. 使用花括号{}创建

集合名={元素,元素,元素......}

# 集合中的元素不允许重复,否则重复的变为一个

3.2. 使用内置函数set()

集合名=

set(range(4))  # range

set([1,2,3])  # 列表

set((1,2,3))  # 元组

set('ABC')  # 字符串,元素为'A','B','C'

set({1,2,3})  # 集合

3.3. 空集合

定义一个空集合

集合名=set()  # 如果是={},类型为字典

(1)、集合的相关操作

1. 集合元素的判断操作

使用in或not in检查集合中是否存在指定的元素

2. 集合元素的新增操作

2.1. 调用add()方法,添加一个元素

集合名.add(元素)

2.2. 调用update()方法,至少添加一个元素

· 集合名.update({元素,元素......}) # 集合

· 集合名.update([元素,元素......]) # 列表

...... # 与上面set创建类似,也可以添加字符串和元组等

# 关于一个和至少一个,可以参照列表元素的增加操作


3. 集合元素的删除操作

3.1. 调用remove()方法,一次删除一个指定元素,如果不存在抛出KeyError

集合名.remove(元素)

3.2. 调用discard()方法,一次删除一个指定元素,如果不存在不会抛异常

集合名.discard(元素)

3.3. 调用pop()方法,一次只删除一个任意元素

集合名.pop()

3.4. 调用clear()方法,清空集合

集合名.clear()

3.5. 调用del方法,删除集合

del 集合名

(2)、集合间的关系

1. 判断两个集合是否相等

可以使用运算符==或!=进行判断

集合A ==/!= 集合B

2. 判断一个集合是否是另一个集合的子集

# 子集定义:一般地,对于两个集合A,B,如果集合A中任意一个元素都是集合B中的元素,我们就说这两个集合有包含关系,称集合A为集合B的子集,

记作A⊆B(或B⊇A),读作“A含于B”(或“B包含A”)

注:子集定义转摘自《数学 必修1A版/普通高中课程标准实验教科书》,下面的交集定义、并集定义同上

可以调用方法issubset进行判断

集合A.issubset(集合B) # 集合A是否是集合B的子集,返回布尔值

3. 判断一个集合是否是另一个集合的超集

# 超集定义:集合A中的每一个元素都在集合B中,且集合A中可能包含B中没有的元素,那么集合A就是集合B的超集,相当于子集反过来

可以调用方法issuperset进行判断

集合A.issuperset(集合B)  # 集合A是否是集合B的超集,返回布尔值

4. 判断两个集合是否没有交集

# 交集定义:一般地,由属于集合A且属于集合B的所有元素组成的集合,称为A与B的交集,记作A∩B(读作“A交B”)

可以调用方法isdisjoint进行判断

集合A.isdisjoint(集合B)  # 集合A与集合B是否没交集,返回布尔值

(3)、集合的数学(数据)操作

1. 两个集合的交集操作

调用方法intersection或&进行交集操作

集合A.intersection(集合B)/集合A & 集合B

# &在Python集合中是求交集的意思

# 输出集合A与集合B的交集部分

2. 两个集合的并集操作

# 并集定义:一般地,由所有属于集合A或属于集合B的元素组成的集合,称为集合A与集合B的并集,记作A∪B(读作“A并B”)

调用方法union或|进行并集操作

集合A.union(集合B)/集合A | 集合B

# |在Python集合中是并集的意思

# 输出集合A与集合B所有的元素,去掉重复元素

3. 两个集合的差集操作

# 差集定义:设A,B是两个集合,则所有属于A且不属于B的元素构成的集合,叫做集合A与集合B的差集,记作A-B

调用方法difference或-进行差集操作

集合A.difference(集合B)/集合A-集合B

# -在Python集合中是差集的意思

# 输出集合A与集合B的差集部分(集合A中的元素-与集合B交集的部分)

4. 两个集合的对称差集操作

# 对称差集定义:设A,B是两个集合,则集合A与集合B中所有不属于A与B并集的元素构成的集合为集合A与集合B的对称差集(A∪B)—(A∩B),记作A△B

调用方法symmetric_difference或^进行对称差集操作

集合A.symmetric_difference(集合B)/集合A^集合B

# ^在Python集合中是对称差集的意思

# 输出集合A与集合B的对称差集(集合A与集合B的并集和集合A与集合B的交集的差集)


5. 集合生成式

# 集合生成式跟列表生成式类似,就是将[]改成{}

5.1. 概念

用于生成集合的公式

5.2. 语法格式

{i*i for i in range(1,10)}

{表示集合元素的表达式 for 自定义变量 in 可迭代对象}

(4)、列表、元组、字典、集合总结

Python四种常用的数据结构

数据结构

是否可变

是否重复

是否有序

定义符号

列表(list)

可变

可重复

有序

[]

元组(tuple)

不可变

可重复

有序

()

字典(dict)

可变

key不可重复

无序

(key:value)

value可重复

集合(set)

可变

不可重复

无序

{}


二十三、字符串

(1)、字符串的创建与驻留机制

1. 字符串

在Python中字符串是基本数据类型,是一个不可变的字符序列

2. 定义(创建)字符串

使用单引号(')、双引号(")以及三引号进行定义

3. 字符串驻留机制

仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量

3.1. 驻留机制的几种情况(使用交互模式)

# win+r输入cmb再输入py进入(PyCharm里Alt+F12再输入py也可以进入)

· 字符串的长度为0或1时

· 符合标识符的字符串 # 有关标识符可在前面第四章找到

· 字符串只在编译时进行驻留,而非运行时

· [-5,256]之间的整数数字 # 包括256

扩展:join()方法:

将序列中的元素以指定的字符连接生成一个新的字符串

字符串.join(序列)

# 具体在本章(2)中的6.2查看

3.1.1. sys中的intern方法强制2个字符串指向同一个对象

import sys # 导入sys模块

变量A=sys.intern(变量B)

3.1.2. PyCharm对字符串进行了优化处理

将一些原本不驻留的处理成驻留的

4. 字符串驻留机制的优缺点

· 当需要值相同的字符串时,可以直接从字符串池里拿来使用,避免频繁的创建和销毁,提升效率和节约内存,因此拼接字符串和修改字符串是会比较影响性能的。

· 在需要进行字符串拼接时建议使用str类型的join方法,而非+,因为join()方法是先计算出所有字符中的长度,然后再拷贝,只创建一次对象,效率要比“+”效率高

(2)、字符串的常用操作

1. 字符串的查询操作

1.1. index()

查找子串(substr)第一次出现的位置,如果查找的子串不存在时,则抛出ValueError

字符串.index(字符串)

1.2. rindex()

查找子串(substr)最后一次出现的位置,如果查找的子串不存在时,则抛出ValueError

字符串.rindex(字符串)

1.3. find()

查找子串(substr)第一次出现的位置,如果查找的子串不存在时,则返回-1

字符串.find(字符串)

1.4. rfind()

查找子串(substr)最后一次出现的位置,如果查找的子串不存在时,则返回-1

字符串.rfind(字符串)

2. 字符串的大小写转换操作

2.1. upper()

把字符串中所有字符都转成大写字母

字符串.upper()

2.2. lower()

把字符串中所有字符都转成小写字母

字符串.lower()

2.3. swapcase()

把字符串中所有大写字母转成小写字母,把所有小写字母都转成大写字母

字符串.swapcase()

2.4. capitalize()

把第一个字符转换为大写,把其余字符转换为小写

字符串.capitalize()

2.5. title()

把每个单词的第一个字符转换为大写,把每个单词的剩余字符转换为小写

字符串.title()

# 字符串是不可变序列,转换后产生一个新的字符串对象


3. 字符串内容对齐操作

3.1. center()

居中对齐

字符串.center(整数,字符串)

第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,默认是空格,如果设置宽度小于等于实际宽度则返回原字符串

3.2. ljust()

左对齐

字符串.ljust(整数,字符串)

第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,默认是空格,如果设置宽度小于等于实际宽度则返回原字符串

3.3. rjust()

右对齐

字符串.rjust(整数,字符串)

第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,默认是空格,如果设置宽度小于等于实际宽度则返回原字符串

3.4. zfill()

右对齐,左边用0填充

字符串.zfill(整数)

该方法只接收一个参数,用于指定字符串的宽度,如果指定的宽度小于等于字符串的长度,返回字符串本身

# zfill()在字符串前有“-”或“+”时,0加在符号右边


4. 字符串的劈分

4.1. split()

· 从字符串的左边开始劈分,默认的劈分字符是空格字符串,返回的值都是一个列表

· 通过参数sep指定劈分字符串的劈分符

· 通过参数maxsplit指定劈分字符串时的最大劈分次数,在经过最大次劈分之后,剩余的子串会单独作为一部分

字符串.split(sep=字符串,maxsplit=整数)   

# ()里可选,默认劈分符和劈分次数,并且sep和maxsplit可以不写:

字符串.split(字符串,整数)

4.2. rsplit()

· 从字符串的右边开始劈分,默认的劈分字符是空格字符串,返回的值都是一个列表

· 通过参数sep指定劈分字符串的劈分符

· 通过参数maxsplit指定劈分字符串时的最大劈分次数,在经过最大次劈分之后,剩余的子串会单独作为一部分

字符串.rsplit(sep=字符串,maxsplit=整数)

5. 字符串的判断操作

5.1. isidentifier()

判断指定的字符串是不是合法的标识符

字符串.isidentifier()

5.2. isspace()

判断指定的字符串是否全部由空白字符组成(回车、换行、水平制表符)

字符串.isspace()

5.3. isalpha()

判断指定的字符串是否全部由字母组成

字符串.isalpha()

# 由汉字组成也返回True

5.4. isdecimal()

判断指定的字符串是否全部由十进制的数字组成

字符串.isdecimal()

5.5. isnumeric()

判断指定的字符串是否全部由数字(字符)组成

字符串.isnumeric()

# 罗马数字,汉字数字等也属于数字

5.6. isalnum()

判断指定的字符串是否全部由字母和数字组成

字符串.isalnum()

6. 字符串的替换与合并操作

6.1. 字符串的替换:replace()

字符串.replace(字符串,字符串,整数)

# 整数参数可选,默认最大次数

第1个参数指定被替换的子串,第2个参数指定替换子串的字符串,第3个参数指定最大替换次数,该方法返回替换后得到的字符串,替换前的字符串不发生变化

6.2. 字符串的并合:join()

将列表或元组中的字符串以指定的字符合并成一个新字符串

字符串.join(序列)

# 序列还可以是字典、集合或字符串,但字典只对键进行连接,集合是无序的,字符串作为字符串序列


(3)、字符串的比较操作

1. 运算符

>,>=,<,<=,==,!=

2. 比较规则

首先比较两个字符串中的第一个字符,如果相等则继续比较下一个字符,依次比较下去,直到两个字符串中的字符不相等时,其比较结果就是两个字符串的比较结果,两个字符串中的所有后续字符将不再被比较

3. 比较原理

两个字符进行比较时,比较的是其ordinal value(原始值),调用内置函数ord可以得到指定字符的ordinal value。与内置函数ord对应的是内置函数chr,调用内置函数chr时指定ordinal value可以得到其对应的字符

ord(字符串)

chr(整数)

4. ==与is的区别

==比较的是value是否相等

is比较的是id是否相等


(4)、字符串的切片操作

# 索引和切片具体可以到第十九章(4)中的2、3查看

· 字符串是不可变序列

· 不具备增、删、改等操作

· 切片操作将产生新的对象

字符串[start:end:step]

(5)、格式化字符串

1. 格式化字符串

按一定格式输出的字符串,实际上就是一个字符串的拼接操作

2. 为什么需要格式化字符串

减少内存空间浪费

3. 格式化字符串的方式

3.1. %作占位符

定义的格式化字符串%(实际值,实际值...)

定义的格式化字符串每个%的位置与后面的实际值的位置相对应

%s:字符串

%i或%d:整数

%f:浮点数

3.2. {}作占位符

定义的格式化字符串.format(实际值,实际值...)

定义格式化字符串每个{}里的数字与后面实际值的正向索引相对应

# {}未指定索引时,与%方式一样{}位置与实际值位置相对应

3.3. Python 3以上的f-string

f定义的格式化字符串

定义格式化字符串{}里填写实际值

4. 指定宽度和精度

%[宽度][精度][格式]

{[索引]:[宽度][.精度]} # {}做占位符时索引可不写

[宽度]:总宽度

[精度]:%做占位符里是精确到小数点后几位;{}做占位符里是一共几位数,后面加上f是小数点后

(6)、字符串的编码转换

1. 为什么需要字符串的编码转换

字符串在网络当中需要使用字节进行传输时,需要先转换成二进制数据进行传输,再转换成字符串类型进行显示

2. 编码与解码的方式

2.1. 编码

将字符串转换为二进制数据(bytes)

字符串.encode(encoding=编码格式)

# 编码格式有GBK,UTF-8等。GBK一个中文占两个字节,UTF-8占三个字节

2.2. 解码

将bytes类型的数据转换成字符串类型

二进制数据.decode(encoding=编码格式)

扩展:len()内置函数

返回对象(包括上面介绍的五种数据类型等)长度或项目个数

len(对象)



# 这里到达B站20000字上限了,具体内容详见WPS笔记

耗时600小时整理《Python教程全套》完全入门版,分享一起学习_高清附字幕的评论 (共 条)

分享到微博请遵守国家法律