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():逐个的将迭代器中的元素提取出来: