导图社区 python基础
Python基础课思维导图,包括数据类型、函数、控制流、问题排查、创建类与函数、模块等的相关知识点,有需要的同学,可以收藏下哟。
编辑于2021-11-30 21:56:45python基础
第一章
print()函数
输出内容
数字print(520)
字符print('hello world'),双引号单引号都可以,不加引号会怎么样?不可以!
含有运算符的表达式,计算表达式的运算结果
输出目的地
显示器
文件
a+表示以读写的方式创建文件,如果文件存在就打开文件,文件不存在就创建文件,在文件尾部追加,赋给变量fq,不加file=,文件内会没有打印输出 fp=open('文件地址','a+') print('hello',file=fp fp.close()
输出形式
换行
print('hello') \n print('world')
不换行(输出内容在一行)
print('hello','world','python')
print(self,*args,sep='',end='\n',file=None)
转义字符
含义:反斜杠+想要实现的转移功能首字母
当字符串中包含反斜杠、单引号、双引号等有特殊用途的字符时,须对其进行转义
举例
反斜杠\\,一个\
单引号\'
双引号\"
换行\n
回车\r,覆盖掉\r之前的同一行内容
水平制表符\t,一组四个空格的位置
退格\b,就是删除一个格
原字符,不希望字符串中的转义字符起作用,在字符串之前加r或R
字符串最后一个字符不能是\
pycharm开发环境调试
断点
程序运行到此处,暂时挂起,停止执行。
进入调试视图
单击工具栏上的按钮
右键单击编辑区:点击debug模块名
快捷键shift+F9
第二章
二进制与字符编码
位bit-字节byte
ASCII码表-GB2312-GBK-GB18030-Unicode-UTF-8
标识符与保留字
保留字:在python中被赋予了特定含义的字符不能用
标识符:自己命名的
区分大小写
字母数字下划线
不能是保留字
不能以数字开头
变量和数据类型
变量
标识:表示对象所存储的内存地址,使用内置函数id(obj)获取
类型:表示对象的数据类型,使用内置函数type(obj)获取
值:表示对象的具体数据,可使用print()打印输出
变量的多次赋值
数据类型
整数int
正数、负数、0
二进制0b、八进制0o、十进制、十六进制0x
浮点数float
带小数点,整数和小数部分
存储不精确,可导入模块decimal from decimal import Decimal
布尔bool
表示真或者假
可转换成整数进行数据运算
True=1
False=0
字符串str
不可变的字符序列
单引号、双引号(一行显示)
三引号(多行显示)''',"""
数据类型转换
对不同的数据类型进行数据拼接时使用
+连接符
str()
int()
文字、字母类(非数字串)字符串无法转化
浮点数转化成整数:抹零取整
布尔类型转化True=1,False=0
float()
文字类(非数字串)无法转换
整数转换成浮点数,末尾加0
布尔类型转换True=1.0,False=0.0
注释
单行注释#开头,直到换行结束
三引号之间的代码为多行注释
中文编码多行注释:在文件开头加上中文声明注释,用以指定源码文件的编码格式 #coding:utf-8
第三章
输入函数input()
作用:接收来自用户的输入
输入值类型为str
对输入的值进行存储
高级使用input()
int(input())在输入时完成字符转换
运算符
算术运算符
标准算术运算符:加+减-乘*除/整除//
整除//一正一负向下取整
取余运算符%
一正一负时:余数=被除数-除数*商(商为整除的商)
幂运算符**
赋值运算符
从右到左
链式赋值
a=b=c=0
参数赋值
+=、-=、*=、/=、//=、%=
系列解包赋值
a,b,c=1,2,3
比较运算符
<,>,>=,<=,!=
==(对象值的比较)
is,is not(对象id的比较)
布尔运算符
and
两者都为真时为真
or
两者都为假时为假
not
对象取反
in,not in
在不在对象里
位运算符
按位与&
对应数位都是1结果数位才是1
按位或|
对应数位都是0结果数位才是0
左移位<<
高位溢出舍弃,低位不足补0,左移一位相当于乘以2
右移位>>
低位溢出舍弃,高位不足补0,右移一位相当于除以2
运算符的优先级
算术运算符>位运算符>比较运算符>布尔运算符>赋值运算符
第四章,程序的流程控制
程序的组织结构
顺序结构
选择结构(分支结构)
循环结构
顺序结构
从上而下顺序执行
对象的布尔值
获取对象布尔值bool()
除False、数值0、None、空字符串、空列表、、空元组、 空字典、空集合外所有对象布尔值均为True
可以直接把对象放在条件表达式判断
分支结构
单分支if结构
if 条件语句: 条件执行体
双分支if...else...结构
if 条件语句: 条件执行体 else: 条件执行体
多分支if...elif...else结构
最后一个else可写可不写
if语句的嵌套
条件表达式
x if 判断条件 else y
若判断条件布尔值为True,条件返回值为x,否则返回值为y
pass空语句
占位符
先搭建语法结构,还没想好代码怎么写的时候
哪些语句一起使用
if语句的条件执行体
for-in语句的循环体
定义函数时的函数体
第十章函数
函数的创建和调用
复用代码、隐藏实现细节、提高可维护性、提高可读性便于调试
创建
def 函数名([输入参数]): 函数体 [return ***]
调用
在函数调用过程中,进行函数的传递,如果是不可变对象,在函数体的修改下不会影响实参的值,如果是可变对象,在函数体的修改会影响到实参的值
函数的参数传递
形式参数
函数定义处
实际参数
函数调用处
位置实参
按顺序传递参数
关键字实参
function(a=10,b=20)等号左侧的变量的名称为关键字,不按顺序传递参数
函数返回值
返回多个值时,结果为元组
函数可以没有返回值
返回一个值时直接返回原值
函数的参数定义
函数定义默认值参数
个数可变的位置参数
定义函数时,可能无法事先确定传递的位置实参的个数时,使用可变的位置参数
使用*定义个数可变的位置形参
结果为一个元组
只能定义一个个数可变的关键字形参
个数可变的关键字形参
定义函数时,无法事先确定传递的关键字实参的个数时,使用可变的关键字形参
使用**定义个数可变的关键字形参
结果为一个字典
只能有一个可变的关键字形参
在一个函数的定义过程中,既有个数可变的关键字形参,也有个数可变的位置形参,要求位置形参放关键字形参前
fun(*list)在函数调用时,将列表中的每个元素都转换为位置实参传入
fun(**dict)在函数调用时将字典中的键值对都转换为位置实参传入
参数传递时可以位置实参和关键字实参相结合
fun(a,b,*,c,d)
c,d两个参数只能采用关键字实参传递
从*之后的形参,在函数调用时,只能采用关键字实参传递
顺序问题
def fun(a,b,*,c,d,*f,**g)
变量的作用域
程序代码能访问该变量的区域
局部变量
在函数体内定义并使用的变量,只在函数内部有效,局部变量使用global声明,这个变量就会成为全局变量
全局变量
函数体外定义的变量,可做用于函数内外
递归函数
在一个函数体内调用该函数本身
递归调用
递归终止条件
递归的调用过程
每递归调用一次函数,都会在栈内存中分配一个栈帧
每执行完一次函数,都会释放相应的空间
递归的优缺点
优点:思路和代码简单
缺点:占用内存多,效率低下
第十一章bug
bug debug
bug类型
SyntaxError
粗心导致的语法错误
漏了末尾的冒号
缩进错误
把英文符号写成中文符号
字符串拼接把字符串和数字拼接在一起
没有定义变量
==与=混用
知识点不熟练导致错误
索引越界问题IndexError
append()方法的使用掌握不熟练
思路不清晰导致错误
使用print()函数
使用#注释部分代码
被动掉坑
错误捕获
try: except ZeroDivisionError: print('除数不能为零')
BaseException包含所有错误
多个错误捕获
try: except: except: else:没有错误执行代码 finally:无论是否发生异常都会执行
try...except...else
如果try块中没有抛出异常,则执行else块,如果try中抛出异常,则执行except块
常见异常类型
ZeroDivisionError
|除(或取模)零(所有数据类型)
IndexError
序列中没 有此索引(index)
KeyError
映射中没有这个键
NameError
| 未声明/初始化对象(没有属性)
SyntaxError
Python 语法错误
ValueError
传入无效的参数
TraceBack打印异常信息
import traceback try: except: traceback.print_exc()
第十二章
两大编程思想
面向过程
事物比较简单,可以用线性的思维去解决
面向对象
事物比较复杂,使用简单的线性思维无法解决
都是解决实际问题的一种思维方式
解决复杂问题,通过面向对象的方式便于我们从宏观上把握事物之间复杂的关系,方便我们分析整个系统,具体到微观操作,仍然使用面向过程的方式来处理
类和对象的创建
类int str float dict list tuple
创建类class 类名: 类属性
类名由一个或多个单词组成,每个单词的首字母大写
类也是一个对象
类属性
直接写在类中所有方法之外里的变量
被该类的所有对象所共享
实例方法
def eat(self):
在类之外定义的叫做函数,类之内定义的叫方法
静态方法
使用@staticmethod修饰的方法叫做静态方法
方法的括号里什么都不能写
使用类名直接访问的方法
类方法
使用@classmethod修饰的方法叫做类方法
方法的括号里写cls
使用类名直接访问的方法
初始化方法
def __init__(self,name,age): self.name=name#实例属性,进行赋值 self.age=age
对象21,'python'
实例名=类名()
有了实例,就可以调用类中的内容
类对象与类属性
对象名.方法名()
类名。方法名(对象名)
动态绑定属性
对象名.属性名
类方法与静态方法
动态绑定方法
对象名.函数名=函数名
第十三章
方法重写
如果子类对继承自父类的某个属性或方法不满意,可以在子类中对其(方法体)进行重新编写
子类重写后的方法中可以通过super().fangfam()调用父类中被重写的方法
object类
所有类的父类,所有类都有object类的属性和方法
内置函数dir()可以查看指定对象的所有属性
__str__()方法,用于返回一个对于"对象的描述",对应于内置函数str()经常用于print()方法,帮我们查看对象的信息,所以我们经常会对__str__()进行重写
特殊方法和特殊属性
特殊属性
__dict__
获得类对象或实例对象所绑定的所有属性和方法的字典
__class__
对象所属的类
__bases__
类的父类类型的元组
__base__类的基类,最近的父类
__mro__
类的层次结构
__subclasses__
类的子类
特殊方法
__len__()通过重写__1en__()方法, 让内置函数len()的参数可以是自定义类型
__add__ () 通过重写__add__ ()方法,可使用自定义对象具有“+”功能
__new__() 用于创建对象
__init__ () 对创建的对象进行初始化
__str__()对象的描述
面向对象的三大特征
封装
提高程序的安全性
将数据(属性)和行为(方法)包装到类对象中,在方法内部对属性进行操作,在类对象的外部调用方法
无需关心方法内部的实现细节,从而隔离复杂度
在python中没有专门的修饰符用于属性的私有,如果该属性不希望在类对象外部被访问,前边使用两个“_"
在类的外部可以通过_类名__对象名进行访问
继承
提高代码的复用性
class 子类类名(父类1,父类2...):
def __init__(self,属性...): super().__init__(属性1,属性2...)
继承父类属性
如果一个类没有继承任何类,则默认继承object
python支持多继承
定义子类时,必须在其构造函数中调用父类的构造函数
多态
提高程序的可扩展性和可维护性
多态就是“具有多种形态”,它指的是:即便不知道一个变量所引用的对象到底是什么类型,仍然可以通过这个变量调用方法,在运行过程中根据变量所引用对象的类型,动态决定调用哪个对象中的方法。
静态语言实现多态
继承
方法重写
父类引用指向子类对象
动态语言实现多态
不关心对象类型,只关心行为
类的浅拷贝与深拷贝
变量的赋值操作
只是形成两个变量,实际上还是指向同一个对象
浅拷贝
对象包含的子对象内容不拷贝
import copy copy.copy()
源对象与拷贝对象会引用同一个子对象
深拷贝
deepcopy
递归拷贝对象中包含的子对象,源对象和拷贝对象所有的子对象也不相同
第十四章
模块
Modules
函数
类
类属性
实例方法
类方法
静态方法
语句
一个模块中可以包含n多个函数
在python中一个扩展名为.py的文件就是一个模块
好处
方便其他程序和脚本的导入并使用
避免函数名和变量名冲突
提高代码的可维护性
提高代码的可重用性
自定义模块
创建模块
新建一个.py文件
导入模块
import 模块名 [as 别名]
from 模块名 import 函数/变量/类
以主程序的形式执行
在每个模块的定义中都包括一-个记录模块名称的变量_ _name_程序可以检查该变量,以确定他们在哪个模块中执行。如果-一个模块不是被导入到其它程序中执行,那么它可能在解释器的顶级模块中执行。顶级模块的name__变量的值为_ main_
if __name__='__main__': pass
只有点击运行该模块作为主程序时,才会执行pass语句
python中的包
分层次的目录结构,将一组功能相近的模块组织在一个目录下
作用
代码规范
避免模块冲突
与目录的区别
包含__init__.py文件的目录称为包
目录里通常不包含__init__.py文件
包的导入
import 包名.模块名
使用from...import...可以导入包,模块,函数,变量
常用
sys
与Python解释器及其环境操作相关的标准库
time
提供与时间相关的各种函数的标准库
OS
提供了访问操作系统服务功能的标准库
calendar
提供与日期相关的各种函数的标准库
urllib
用于读取来自网上(服务器)的数据标准库
json
用于使用JSON序列化和反序列化对象
re
用于在字符串中执行正则表达式匹配和替换
math
|提供标准算术运算函数的标准库
decimal 用于进行精确控制运算精度、有效数位和四舍五入操作的十进制运算
logging提供了灵活的记录事件、错误、警告和调试信息等目志信息的功能
第三方模块的安装和使用
安装
pip install 模块名
使用
import 模块名
第十五章
编码格式
python解释器使用的是unicode,内存
.py文件在磁盘上使用UTF-8存储,外存
文件的读写原理
使用内置函数open()创建文件对象
file=open(filename [,mode,encoding])
file.readlines()
文件存储类型
文本文件
存储普通字符文本,默认为Unicode字符集,可以使用字符集打开
二进制文件
把数据内容用字节进行存储,无法用记事本打开,必须使用专用软件打开,如mp3音频文件,jpg图片,doc文档等
文件读写操作
r
以只读模式打开文件, 文件的指针将会放在文件的开头
W
以只写模式打开文件,如果文件不存在则创建,如果文件存在,则覆盖原有内容,文件指针在文件的开头
a
以追加模式打开文件,如果文件不存在则创建,文件指针在文件开头,如果文件存在,则在文件末尾追加内容,文件指针在原文件末尾
b
以二进制方式打开文件,不能单独使用,需要与共它模式一起使用,rb, 或者wb
+
以读写方式打开文件, 不能单独使用,需要与其它模式- -起使用,a+
没有+表示只读或者只写
文件对象的常用方法
read([size])
从文件中读取size个字节或字符的内容返回。若省略[size],则读取到文件末尾,即一次读取文件所有内容
readline()
从文本文件中读取一-行内容
readlines ()
把文本文件中每一-行都作为独立的字符串对象,并将这些对象放入列表返 回
write(str)
将字符串str内容写入文件
writelines(s_list)
将字符串列表s_ list写入文本文件,不添加换行符
seek (offset [, whence])
把文件指针移动到新的位置,offset表示相对于whence的位置: offset为正往结束方向移动,为负往开始方向移动 whence不同值代表不同含义 0从文件头开始计算(默认值) 1从当前位置开始计算 2从文件尾开始计算
tell()
返回文件指针的当前位置
flush()
把缓冲区的内容写入文件,但不关闭文件
close()
把缓冲区的内容写入文件, 同时关闭文件,释放文件对象相关资源
with语句(上下文管理器)
with语句可以自动管理上下文管理资源,不论什么原因跳出with块,都能确保文件正确的关闭,以此来达到释放资源的目的
目录操作
os模块是Python内置的与操作系统功能和文件系统相关的模块,该模块中的语句的执行结果通常与操作系统有关,在不同的操作系统.上运行,得到的结果可能不一样。
os模块与os.path模块用于对目录或文件进行操作
getcwd()
返回当前的工作目录
listdir (path)
| 返回指定路径下的文件和目录信息
mkdir (path[, mode])
创建目录
makedirs (path1/ path2... [, mode])
创建多级目录
rmdir (path)
删除目录
removedirs (path1/path......
删除多级目录
chdir (path)
将path设置为当前工作目录
第九章字符串
字符串的驻留机制
单引号、双引号、三引号定义
仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量
交互模式
字符串长度为0或1时
符合标识符的字符串
含有字母数字下划线
字符串只在编译时进行驻留,而非运行时
[-5,256]之间的整数数字
强制驻留
import sys a=sys.intern(b)
pycharm对字符串进行了优化处理
优缺点
当需要值相同的字符串时,可以直接从字符串池里拿来使用,避免频繁的创建和销毁,提升效率和节约内存,因此拼接字符串和修改字符串是会比较影响性能的。
在需要进行字符串拼接时建议使用str类型的joig方法,而非+ ,因为join()方法是先计算出所有字符中的长度,然后再拷贝,只new-次对象,效率要比"+"效率高
常用操作
查询操作
index()查找子串第一次出现的位置,若子串不存在,则抛出valueerror
rindex()查找子串最后一次出现的位置,若子串不存在,则抛出valueerror
find()查找子串第一次出现的位置,若子串不存在返回-1
rfind()查找子串最后一次出现的位置,若子串不存在,返回-1
大小写转换
upper ()
把字符串中所有字符都转成大写字母
lower ()
把字符串中所有字符都转成小写字母
swapcase ()
把字符串中所有大写字母转成小写字母,把所有小写字母都转成大写字母
capitalize()
把第一一个字符转换为大写,把其余字符转换为小写
title()
把每个单词的第-一个字符转换为大写,把每个单词的剩余字符转换为小写
转换之后会产生新的字符串对象
对齐操作
center ()
居中对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,默认是空格,如果设置宽度小于实际宽度则则返回原字符串
ljust ()
左对齐, 第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,默认是空格如果设置宽度小于实际宽度则则返回原字符串
rjust()
右对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,默认是空格如果设置宽度小于实际宽度则则返回原字符串
zfill( )
右对齐, 左边用0填充, 该方法只接收-一个参数,用于指定字符串 的宽度,如果指定的宽度小于等 于字符串的长度,返回字符串本身
字符串劈分
split()
从字符串的左边开始劈分,默认的劈分字符是空格字符串,返回的值都是-一个列表
以通过参数sep指定劈分字符串是的劈分符
通过 参数maxsplit指定劈 分字符串时的最大劈分次数,在经过最大次劈分之后, 剩余的子串会单独做为一部分
rsplit()
从字符串 的右边开始劈分,默认的劈分字符是空格字符串,返回的值都是一一个列表
以通过参数sep指定劈分字符串是的劈分符
通过参数maxsplit指定劈分字符串时的最大劈分次数,在经过最大次劈分之后,剩余的子串会单独做为一部分
字符串判断
isidentifier()判断指定的字符串是不是合法的标识符
isspace()判断指定的字符串是否全部由空白字符组成(回车、换行、水平制表符)
isalpha()判断指定的字符串是否全部由字母组成
isdecimal()判断指定字符串是否全部由十进制的数字组成
isnumeric()判断字符串是否全部由数字组成
isalnum()判断字符串是否全部由字母和数字组成
字符串替换
replace() 第1个参数指定被替换的子串,第2个参数指定替换子串的字符串,该方法返回替换后得到的字符串,替换前的字符串不发生变化,调用该方法时可以通过第3个参数指定最大替换次数
字符串合并
join()将列表或者元组中的字符串合并成一个字符串
字符串比较
比较规则:首先比较两个字符串中的第-个字符,如果相等则继续比较下一个字符,依次比较下去,直到两个字符串中的字符不相等时,其比较结果就是两个字符串的比较结果,两个字符串中的所有后续字符将不再被比较
< > <= >= == !=
==与is区别 ==比较的是value is比较的是id
比较原理:两上字符进行比较时,比较的是其ordinal value(原始值),调用内置函数8rd可以得到指定字符的ordinal value。 与内置函数ord对应的是内置函数chr,调用内置函数chr时指定ordinalvalue可以得到其对应的字符
字符串切片操作
切片操作产生新的对象
字符串是不可变类型不能够增删改
str[start:stop:step]
没有start从0开始
没有stop切到结尾
step为-1倒置字符串
格式化字符串
%作为占位符
%s字符串,%i或者%d整数,%f浮点数
%10d,10个宽度
%.3f小数点后保留三位
%10.3f总宽度为10,小数点后三位
'我的名字叫%s,今年%d岁了' % (name,age)
{}作为占位符
'我的名字叫{0},今年{1}岁,我真的叫{0}'.format(name,age)
'{0:.3}'表示一共三位数
'{0:10.3f}'表示宽度为10,保留三位小数
0可以省略不写
f'我叫{name},今年{age}’
字符串的编码转换
编码s.encode(encoding='GBK')
将字符串转换为二进制数据(bytes)
解码byte.decode(encoding='GBK')
将bytes类型的数据转换成字符串类型
第八章元组和集合
元组
不可变序列(字符串、元组)没有增删改 可变序列(列表、字典)可以增删改,对象地址不发生改变
创建方式
小括号t=('python','hello',20)
使用内置函数t=tuple(('python','hello'))
只包含一个元素的元组需要使用逗号和小括号t=('10,)
为什么是不可变序列
在多任务环境下,同时操作对象时不需要加锁
元组中存储的是对象的引用
如果元组中对象本身是不可变对象,则不能再引用
如果元组中对象是可变对象,则可变对象的引用不允许改变,但数据可以改变
不允许修改元素
可迭代对象
使用for in 进行元组遍历
使用索引遍历,需要先知道元组内有多少元素
集合
内置数据结构,可变类型序列,是没有value的字典
创建
{key1,key2,key3}
内置函数set()
只能使用set()构建空集合
set([1,2,3])将列表中的元素转化为集合,会去掉重复元素
集合内元素不允许重复
基本操作
判断
in,not in
增加
add()一次添加一个元素
update()一次至少添加一个元素
删除
remove()一次删除一个指定元素,不存在返回keyError
discard()一次删除一个指定元素,若不存在不返回异常
pop()一次只删除一个任意元素
clear()清空集合
集合间的关系
两集合是否相等==,!=
一个集合是否是另一个集合的子集
调用A.issubset(B)方法
一个集合是否是另一个集合的超集
调用A.issuperset(B)方法
两个集合有没有交集
调用A.isdisjoint(B)方法
没有交集False
集合的数学操作
交集
s1.intersection(s2)
s1 & s2
并集
s1.union(s2)
s1|s2
差集s1有s2没有的
s1.diference(s2)
s1-s2
对称差集s1有s2没有的,s2有s1没有的
s1.symmetric_difference(s2)
s1^s2
集合生成式
{i*i for i in range(1,10)}
第七章字典
字典原理
Python内置的数据结构之一,与列表一 样是一个可变序列
以键值对的方式存储数据,字典是一个无序的序列
基本操作
字典的创建
花括号{}创建,内置函数dict(name='jack',age=20)创建
字典的查询
[]:dict['张三']
不存在报keyError
get()方法,dict.get('张三')
不存在报None
字典键的判断
in,not in,存在返回True
字典元素的新增/修改
dict['张三']=10
字典元素的删除
del dict['张三']
clear()清空字典元素
字典遍历
for item in dict: print(item)
获取字典视图
keys()获取字典中所有键
list(keys())将所有的key组成的视图转成列表
values()获取字典中所有值
list(values())将所有的values组成的视图转成列表
items()获取字典中所有键值对
list(items())列表元素为元组
字典的特点
字典中的所有元素都是一个key-value对,key不允许重复,value可以重复,重复后边的值会覆盖前边的值
字典中的元素是无序的
字典中的key必须是不可变对象,整数,字符串
字典也可以根据需要动态地伸缩
字典会浪费较大的内存,是一种使用空间换时间的数据结构
字典推导/生成式
内置函数zip()
用于将可迭代的对象作为参数,将对象中对应的元素打包成一个元组,然后返回由这些元组组成的列表
第六章列表
列表的创建与删除
使用[]创建
使用内置函数list()
列表的查询操作
获取列表中指定元素的索引index()
如查列表中存在N个相同元素,只返回相同元素中的第一个元素的索引
如果查询的元素在列表中不存在,则会抛出ValueError
还可以在指定的start和stop之间进行查找
获取列表中的单个元素
正向索引从0到N-1
逆向索引从-N到-1
指定索引不存在,抛出IndexError
获取列表中的多个元素
列表名[start:stop:step]
切片操作
切片结果:原列表片段的拷贝,一个新的列表对象
切片范围[start,stop]
step默认为1,简写为[start:stop]
step为正数
[:stop:step]切片的第一个元素默认是列表的第一个元素
[start::step]切片的最后一个元素默认是列表的最后一个元素
step为负数
[:stop:step]切片的第一个元素默认是列表的最后一个元素
[start::stop]切片的最后一个元素默认是列表的第一个元素
判断元素是否在列表中in,not in
列表元素遍历
for 迭代变量 in 列表名 操作
列表元素的增删改
增加操作
append()在列表的末尾增加一个元素
extend()在列表的末尾至少添加一个元素
insert(n,a)在列表的任意位置添加一个元素
切片:在列表的任意位置添加至少一个元素
删除操作
remove()一次删除一个元素,重复元素删除第一个,元素不存在抛出valueError
pop()删除一个指定索引位置上的元素,指定索引不存在抛出IndexError,不指定索引,删除列表中最后一个元素
切片,一次至少删除一个元素,产生一个新的列表对象
list[start:stop]=[]不产生新的列表对象,而是删除原列表中的内容
clear()清空列表
del删除列表
修改操作
为指定索引的元素赋予一个新值list[索引]=新值
为指定的切片赋予一个新值list[start:stop]=[]
列表元素的排序
调用sort()方法,列表中的所有元素默认按照从小到大的顺序进行排序,可以指定reverse=True,进行降序排列,不产生新的列表对象
调用内置函数sorted(),可以指定reverse=True,进行降序排序,原列表不发生改变,产生新的列表对象
列表推导式(生成式)
[i*i for i in range(1,10)]
特点
列表元素按顺序有序排序
索引映射唯一一个数据
列表可以存储重复数据
任意数据类型混存
根据需要动态分配和回收内存
第五章循环
range()函数
内置函数,用于生成一个整数序列
创建range()函数
range(stop)
创建一个[0,stop)之间的整数序列,步长为1
range(start,stop)
创建一个[start,stop)之间的整数序列,步长为1
range(start,stop,step)
创建一个[start,stop)之间的整数序列,步长为step
返回值:迭代器对象range(start,stop)
使用list(a)函数查看range对象中的数字序列
优点
不管range对象表示的整数序列有多长,所有range对象占用的内存空间都是相同的,因为仅仅需要存储start,stop和step,只有当用到range对象时,才会去计算序列中的相关元素
使用in与not in判断整数序列中是否存在指定的整数
while循环
四步循环法
初始化变量、条件判断、条件执行体(循环体)、改变变量
for-in循环
in表达从(字符串、序列等)中依次取值,又称为遍历
for-in遍历的对象必须是可迭代对象
for 自定义的变量 in 可迭代对象: 循环体
循环体内不需要访问自定义变量,可以将自定义变量替代为下划线
break、continue与else语句
break
用于结束循环结构,通常与分支结构if一起使用
continue
用于结束当前循环,进入下一次循环,通常与if一起使用
else
if
IF条件表达式不成立时执行else
while
没有碰到break时执行else,循环的正常执行次数执行完,没有遇到break时执行else
for
没有碰到break时执行else
嵌套循环
循环结构中又嵌套了另外的完整的循环结构,其中内层循环做为外层循环的循环体执行
二重循环中的break和continue用于控制本层循环
列表字典元组集合区别