python基础:变量、字符串、比较运算符、缩进、数字类型、数字间的运算、布尔类型、分支和循环、列表、元组、字符串、序列

参考视频:

https://www.bilibili.com/video/BV1c4411e77t?p=2

参考文档:

https://blog.csdn.net/ityard/article/details/102807071?utm_source=app&app_version=4.13.0

一、变量

 

 

 访问变量可以直接用该变量的变量名来访问。

tips:

1)变量不可以以数字开头。

2)变量区分大小写。

3)python中支持中文变量名。

 

如果将中文赋值给变量,中文要加引号

 

 

▲交换两个变量的值:

 

 

二、字符串

python的字符串主要有:

Single quotes

Double quotes

Triple quoted

 

 

 上图中,"\"表示转义字符,\ 后的 ' 仅表示字符单引号,不表示字符串的起始符号。

 

 在 \ 号前再加上一个转义字符 \ 号,表示显示出 \ 号。

\\ 中第一个 \ 是转义字符,第二个 \ 是要转义的字符串。

 

▲原始字符串:

 

 加上 r 后表示之后的字符串中没有转移字符串,全部按照原始字符串打印输出。

 

▲长字符串 Triple queoted:(三个单引号或者三个双引号都可以,但是一定要成对出现)

在一行的末尾加 \ 表示内容还未输入完毕。

 

使用长字符串,就不用每一行末尾都打 \ 来表示该行还未结束,如:

 

 

▲字符串的加法和乘法:

字符串的加法是拼接

字符串的乘法是复制

 

三、比较运算符

 

 

四、缩进

python通过缩进层次来划分语句的执行:

运行:

 

 

 运行:

 

▲引用库函数,导入随机数

 

 

五、数字类型

python有:整数、浮点数和复数三种类型

python中整数有无限的精度,可以随时随地进行大数运算。

python中浮点数是有误差的:

 

 

解决方法:引入decimal模块

 

此外,python采用科学计数法,如:

 

5e-05表示5*10^(-5)

复数:复数包含实部和虚部

 

 

六、数字间的运算

 

 

七、布尔类型

 

 为假的:

 

其中,Fraction(0,1) 表示分子为0,分母为1的有理数

Tips:

 

▲逻辑运算符:and or not

其中,如果给到的操作数是两个数值,则运算的结果也是两个数值。

and or 这两个运算符遵从短路逻辑:从左往右,只有当第一个操作数的值无法确定逻辑运算的结果时,才对第二个操作数进行求值。

python的运算符优先级:

 

 

八、分支和循环

▲分支结构

1.

 

 

 

2.

 

 

 

 

 3.

 

 

 

 

 

 

4.

 

 

5.

 

 

 

 

 

 

▲分支结构的嵌套

 

 

 

▲循环结构

1.while 循环

 

 

 

 

跳出死循环用

1)break:跳出本级循环

 

 

注意上图中的yes必须加引号,否则 不加引号的yes就是 变量了。

2)continue:跳出本轮循环

 

 

 

循环中的else:

 

 

 

循环中的嵌套:

 

2.for循环

 

 

 

 

但是要注意,整形不是 可迭代对象,因此需要使用 range() 函数:

 

 

range(stop) :生成一个从0开始到stop间的整数数列

range(start,stop):

 

 

range(start,stop,step):指定跨度,其中step也可以为负数

 

 

 

 

计算从0加到1000000:

 

 

 

九、列表

列表可以包含不同类型的元素,元素之间用逗号隔开。

 

 

 

列表切片:

 

 

注意, rhyme[0:3] 表示输出 0~2 三个元素,不包括 rhyme[3]

▲列表的增删改查:

1.增

使用 append() 方法,功能是在列表的末尾添加一个指定的元素

 

 

exend() 方法可以直接添加一个可迭代对象(列表即是一个可迭代对象),并将内容添加到列表的最后一个元素的后面

 

 

使用切片的方法也可以实现插入:

 

 

注意,上图中 如果是 s[5:],则表示输出从第六个元素开始的数;如果是s[0:],则表示输出从列表中第一个元素开始的数。

上面的 s[len(s):]=[6] 相当于 s.append(6)

 

 

上图中的 s[len(s):]=[7,8,9] 相当于 s.extend([7,8,9])

 

▲在列表的任意位置添加数据:

insert() 方法:第一个参数指定待插入的位置,第二个参数指定待插入的元素

 

 

 

2.删除

使用 remove() 方法

 

 

注意:

如果列表中存在多个匹配的元素,那个只会删除第一个。

如果指定的元素不存在,那么程序就会报错

 

▲删除指定位置上的元素,使用 pop() 方法,其参数是要删除元素的索引

 

 

注意,上图中 s.pop(4) 是指删除下标为4的元素,并不是删除元素4,所以删除的元素为5

 

▲clear() 方法,清空列表

 

 

 

3.改

 

 

 

 

 

排序方法:

sort() 从小至大排序

 

 

reverse() :将列表中的元素翻转,先使用 sort() 再使用 reverse() 相当于从大至小排序

 

 

或者直接:使用s.sort(reverse = Ture)

 

 

 

4.查

count() 函数,查询列表里有多少个该元素

如 s.count(3) 即查询列表中有多少个3这个元素

 

 

 

index() 函数,查找列表中某个元素的索引值

如 s.index(4) 即查找s列表中4这个元素的索引值

 

 

如果一个列表中有多个相同的元素,则 index() 函数会返回第一个该元素的索引值

index(x,start,end) 指从指定范围中查找x

▲copy() 函数(浅拷贝)

 

 

 

▲列表的加法和乘法运算

列表的加法运算是拼接

 

 

列表的乘法是将列表的元素重复n遍

 

 

 

▲嵌套列表

 

 

访问嵌套列表:

使用循环可以访问嵌套列表

 

 

 

 

 

 

 

 

使用循环来初始化二维列表:

 

 

注意,不能这样来创建二维列表:

 

 

上图中,is 运算符 用来检验两个变量是否指向同一个对象的一个运算符

显然从上图中看出,A的第一行 A[0] 和A的第二行 A[1] 不是同一个对象,但是B[0] 和B[1] 是同一个对象,如下图所示:

 

 

 

python文档中给出的解释:

当我们使用 lists = [ [ ] ] * 3 来创建列表 lists 时,并不是简单的拷贝,而只是对[ [ ] ] 重复引用了3次,所以当我们使用 lists[0].append(3) 时,并不是只是 lists中的第一个空列表元素中的值 lists[0] 变为3,而是三个全部变为了3

而一般的情况如下:

 

 

 

▲变量中的赋值,深拷贝和浅拷贝:

 

 

这样,如果更改x列表中的元素,那么y列表中的元素也会随之改变,如下图所示

 

此时:

如果想要得到两个独立的列表,要通过拷贝来实现

拷贝分为 深拷贝和浅拷贝

浅拷贝:利用 copy() 或者列表切片的方法都是浅拷贝

copy()函数:

 

 

此时:

 

 

列表切片:

 

 

 

但当涉及到嵌套列表时,若使用copy() 方法:

 

 

由上图可知,虽然只是修改了x[0][0],但是二维列表y中的元素也被修改了

这是因为浅拷贝只是拷贝了外层的对象,如果包含嵌套对象的话,那么拷贝的只是其引用,如下图所示:

此时可以使用深拷贝 deepcopy() 来解决:

若要使用深拷贝,需要先导入copy模块

如上图所示,先导入copy() 模块,copy模块中的copy() 函数是浅拷贝函数,copy模块中的 deepcopy() 函数是深拷贝函数。

deepcopy() 函数将原对象拷贝的同时,也将对象中所有引用的子对象一并进行了拷贝。

 

 

但是深拷贝的效率不如浅拷贝。

 

▲列表推导式

如果要将一个列表中的每个元素都变为2倍:

 

 

列表推导式:

 

 

 

列表推导式的构造:

 

 

 

 

 

 

 

 

 

 

列表推导式还可以添加一个if语句:

 

 

其中上述语句的执行顺序是:

 

 

 

例子:

 

 

包含嵌套的列表推导式:

 

如:将一个二维数组降维成一维数组:

 

其中,for row in matrix 是第一层循环,for col in row是第二层循环

 

笛卡尔积:

 

 

列表推导式的最复杂的一种构造:

 

 

 

十、元组

 

元组可以像列表一样同时容纳多种类型的对象,也拥有字符串不可变的特性。

 

由上图可知,元组可以不加括号,也可以使用切片,并且元组中的元素不能修改,当修改一个元组中的元素时会发生错误。

元组的查询及一些其他用法:

 

如何生成只有一个元素的元组:

 

 

▲打包和解包:

创建一个元组称为将元组中的元素打包;

一次性将元组中的元素都赋值给变量称为元组的解包。

 

且这种用法其他数据类型也可以使用:

 

但是一定要注意左边的变量个数一定要与右边的元素个数相同。

 

python中可以多重赋值:

 

实际上就是先将10,20进行元组打包,再解包给x,y两个变量

 

注意一点,元组虽然是不可变的,但元组中的元素若是可变的列表,则列表中的元素仍然是可变的,如下图:

 

 

十一、字符串

如何判定一个数是否为回文数,可以使用字符串进行解决:

 

 

字符串中的方法:

 

capitalize():将字符串的首字母变为大写,其他变为小写,并且返回的并不是字符串,因为字符串是不可变的对象,返回的只是生成的一个新的字符串。

casefold():返回一个所有字母都小写的字符串

title():字符串中每个单词的首字母都变大写 ,其他都变为小写

swapcase():大小写翻转

upper():所有字母变大写

lower():所有字母变小写

 

 

 

 

count()函数用于查找sub子字符串在字符串中出现的次数

 

 find()和rfind函数是查找sub子字符串在字符串中的索引下标值,前者从左往右找,后者从右往左找

 

 

 

join(iterable)

字符串拼接

 

 

 

 

▲如何用 join()函数实现两个字符串的拼接

 

 

只需用空将字符串连接起来就可以了,join()方法实现字符串拼接要比 + 实现字符串拼接效率高很多很多。

 

▲格式化字符串  format()

 

 

 

 

需要注意的是,我们还可以在 {} 中添加索引下标:

 

 

这是因为括号中的参数会被当做是元组中的元素来看待,因此 Tom 的索引是0,Jerry 的索引下表是1.

同时,同一个索引值可以被引用多次:

 

还可以使用关键字进行索引:

 

如果想输出花括号的话,只需:

 

 

▲f/F-字符串:一种让格式化字符串更简便的语法表达

 

 

十二、序列

列表、元组和字符串都统称为序列

可变序列:列表

不可变序列:不可变序列

能够作用域序列的一些运算符和函数:

+ :拼接

* :重复

in:判断某个字符是够包含在序列中

 

is:判断两个对象是否id相同(id相当于c语言中的地址)

del:用于删除一个或多个指定的对象

 

del同样适用于列表的切片等中:

 

用del实现列表的clear()方法:

 

 

▲跟序列相关的一些函数

 

list():将一个可迭代对象转换为列表:

 

同样的,tuple()是将一个可迭代对象转化为元组,str()是将一个可迭代对象转换为字符串,如上图所示。

 

对比传入的参数,并返回最小值和最大值

 

 

 

 

 排序以及翻转。

对列表s使用sorted()和sort()方法:

sorted()函数返回一个全新的列表,而sort()方法在原列表上进行更改。

同样的reversed()和reverse()也是一样的。

sort()函数只能处理列表,而sorted()函数可以处理任何可迭代对象。

 

all()函数是判断可迭代对象中是否所有元素都为真;

any()函数是判断可迭代对象中是否存在元素为真。

 

 

 

 

 

 

其中,ord() 函数是求 unicode编码。

 

 

 

 该函数的第一个参数是过滤的参数,第二个参数是待过滤的对象

 

 

▲迭代器:一次性的可迭代对象

如,map函数会返回一个迭代器:

 

用for语句访问过迭代器之后,再访问的话就是空了

 

iter():将可迭代对象变为迭代器

 

如上图,x是一个列表,是一个可迭代对象,而y类型是 list_iterator,是一个迭代器

next():逐个的将迭代器中的元素提取出来:

 

posted @ 2021-08-25 23:37  SanFranciscoo  阅读(129)  评论(0编辑  收藏  举报