他的回复:
华为云ID:ypmily+第2周笔记(入门篇) --- ### 3.1 Python中的数据类型 ##### 数值 1. 数据和容器 - Python中提供了六种内置的数据类型: - **Number(数值)、String (字符串)、List(列表)、Tuple (元组).Dictionary(字典)、 Set(集合)** - 这些数据类型如同容器一般用于存放数据。 2. Python中的数据类型 - 这些数据类型不仅可以提高Python的运行效率,还极大地提高了我们的开发效率。并且它们让Python的操作变得简单便捷。 - Python中的数据类型可以做以下几种分类: - 有序:可以使用下标(索引)访问元素。 - 无序:不可以使用用下标(索引)访问元素。 - 可变:可以被修改。 - 不可变:不可以被修改。 3. 结构分类 ||有序|无序| |:---:|:---:|:---:| |可变|列表|字典、集合| |不可变|字符串、元组|数值| 4. Number(数值) - Python3里数值类型支持: |类型|值|范围| |:--:|:--:|:--:| |int|1,2|(-oo,+ oo)| |float|1.2,3.7E-2|(-oo,+ oo)| |bool|True|[True,False]| |complex|x+yj|×是实数部分,y是虚数部分| > **bool在python3里面继承int类型** 5. 复数 - 复数由实数部分和虚数部分构成。 - 虚数不能单独存在,它们总是和一个值为0.0的实数部分一起构成一个复数。 - 虚数部分必须有后缀j或J。 - 实数部分和虚数部分都是浮点数。 6. 数值的计算 - 数值类型的基本操作: - 加(+) - 减(-) - 乘(*) - 除(/) - 取余(/) - 取整(%,//) - 乘方(**) - 如果不同的类型的数字(如int,float)进行运算,则结果类型为精度较高的那个类型。 7. Python中的计算函数 - Python中内置了很多用于数值计算的函数。 - 求绝对值: abs(x); - 四舍五入: round(x); - 返回两个数值的商和余数: divmod(y,x) - 一求取最大值:max、min - 求和: sum 8. math模块 - Python math模块提供了许多对浮点数的数学运算函数。 - 同时还提供了cmath模块,cmath模块的函数跟math模块函数基本一致,区别是cmath模块运算的是复数,math模块运算的是数学运算。 - math模块常用方法: - 三角函数: sin、cos、tanh - 获取绝对值:fabs - 向上取整: ceil; - 向下取整:floor - 获取阶乘: factorial - x的y次方:pow ##### 字符串 1. 字符和字符串 - 字符指类字形单位或符号,包括字母、数字、运算符号、标点符号和其他符号,以及一些功能性符号。 - 字符串是编程语言中最常见的一种数据类型由字符组成,具有以下特征: - 有限的字符集合; - 可以由汉字、数字、字母、符号组成; - 一般有引号包裹。 2. Python中的String (字符串) - Python中字符串是一个由多个字符组成的序列 - Python中没有字符。 - 字符的个数即为字符串的长度(可用len函数查看) - 单个字符被认作长度为1的字符串。 - Python中的字符串是有序且不可变的。 3. 创建一个字符串 - 在Python中声明一个字符串有三种方式: - 使用单引号('...')创建: 'Python'; - 使用双引号("...")创建:"Python" ; - 使用三引号(""...."", """..."""): '''Python'''; - 除了三种声明方式以外,还可以通过类型转化的方式str(obj),生成字符串。 - 使用单引号和双引号创建的字符串是一样的,不能换行;使用三引号创建的字符串可以是很长的字符串(可换行)。 > **引号成对出现** 4. 特殊的字符串–-转义字符 - 在字符串中因为有一些字符因为本身具备一些功能,所以没有办直接使用,如双引号和单引号。此时可以使用转义字符来实现这些符号的使用。 - 转义字符:\ - 可以屏蔽符号原有的功能("张三说:\"这是一个字符串\""); - 加入特殊字母可以使用特殊功能; - 输出\,可以使用\\. 5. 常见的转义字符 |符号|作用| |---|---| |\n|换行| |\t|水平制表(HT)(跳到下一个TAB位置)| |\ \\|代表一个反斜线字符'\'| |\0|空字符(NUL)| |\v|垂直制表(VT)| - 原始字符串:在字符串有一些\,但是不希望进行转义可以使用原始字符串。 - 字符串前面加r或者R实现。print(r"pyt\nhon") 6. 字符串的运算 - +∶拼接两个字符串,a="hello";b="world"=>a+b='helloworld'。 - \* : 字符串乘以一个数字可以得到重复次数的新的字符串,"a"*2=>"aa"。 7. 索引与切片 - 获取字符串中的字符元素: - 因为字符串是个有序序列,所以我们在访问字符串中的某些元素时可以根据元素对应的下标(索引)来访问: str[n]。正向访问时下标从0开始,到字符串长度减1。逆向访问时从-1开始,每次递减1。 - Str = "python”=> Str[0] =>“p" 8. 切片 - 批量获取(切片): str[a:b:c],a是起始元素的位置,b是终止元素的位置,c是步长。 - abc同样可以为负值。 - 当a为0、b为n、c为1时,可以省略不写: str[:](#); str[::2] (每两个取一个)。 - 注意:切片时一定要根据起始和终止位置设置步长;切片和索引可以用在Python中所有的有序序列中。 9. 字符串的常用操作 |操作|解释|示例| |---|---|---| |分割|str.split(str1):以为str1为分隔符对字符串切割|'python'.split('h')输出['pyt' , 'on']| |替换|str.replace(str1,str2):将字符串中的str1替换为str2生成新的字符串|'python'.replace('py' ,'PY')输出'PYthon'| |小写|str.lower():将字符串中的大写字符转化为小写|"PYTHON".lower()输出'python'| |大写|str.upper():将字符串中小写字符转化为大写|'python'.upper()|'python'.upper()输出'PYTHON'| |拼接|str.join(iter):将所给参数中的每个元素以指定的字符连接生成一个新的字符串|"-".join("huawei")输出'h-u-a-w-e-i' |格式化输出|格式化操作符(百分号%)、字符串转换类型和格式化操作符辅助指令实现格式化输出|"My name is %s , age is%d'%('AI",63)输出:My name is Al, age is 63| 10. 字符串格式化输出 - 字符串格式转换类型表格式 |格式符|描述| |:--:|--| |%c|字符及其ASCII码| |%s|字符串| |%d|有符号整数(十进制)| |%u|无符号整数(十进制) |%o|无符号整数(八进制)| |%x|无符号整数(十六进制)| |%X|无符号整数(十六进制大写字符)| |%e|浮点数字(科学计数法)| |%E|浮点数字(科学计数法,用E代替e)| |%f|浮点数字(用小数点符号)| - 格式化操作辅助指令 符号|作用 :--:|-- *|定义宽度或者小数点精度 -|用作左对齐。 +|在正数前面显示加号(+)。 |在正数前面显示空格。 #|在八进制数前显示零(o),在十六进制前显示Ox或者0X(取决于用的是x还是X) 。 0|显示数字前面填充“O”而不是默认的空格。 (var)|映射变量(字典参数)。 m.n|m是显示的最小总宽度,n是小数点后的位数。 11. string模块 - 在Python中,字符串本身内置了很多的操作方法和属性,除此以外Python还提供了一个字符串操作模块string。 - 在Python3中string模快提供的方法,和字符串内置的方法相似度较高。 ##### 元组 1. Tuple(元组) - 元组是一个有序且不可变序列,其中的元素可以是任意对象。一元组可以使用索引和切片的方式取值。 - 元组中的数据一旦生成就无法更改。 2. 元组的创建 - 元组存储的数据更加安全。 - 元组由一个小括号包裹,元素用逗号隔开。声明一个元组有三种方式: - Tuple = tuple((obj1, obj2,..)) # 可以通过此方法将其他序列转为元组 - Tuple = (obj1, obj2,...) - Tuple = obj1,obj2,obj3 3. 单元素元组 - 如果在声明元组时元组只有一个元素,需要在元素后面加上逗号,告诉解释器这不是运算符号中的括号。 - 嵌套元组中也是如此。 4. 元组的运算 - +:拼接两个元组: ``` t = (1,2,3) t1 = ( 3,2,1) t+t1 (1,2,3,3,2,1) ``` - *:元组乘以一个数字可以得到重复次数的新的元组: ``` t =(1,2,3) t*2 (1,2,3,1,2,3) ``` ##### 列表 1. List(列表) - 列表是一个有序可变的序列,其中的元素可以是任意对象。一列表可以使用索引和切片的方式取值。 - 列表可以随意的修改、删除和增加元素。 - 相较于元组而言,列表的安全性差,但是灵活性高。一列表支持的运算符同元组一样。 2. 列表的创建方式 - 列表由一个中括号包裹住元素,元素用逗号隔开。创建列表的方式有: - List = list((obj1, obj2,…))#可以通过此方法将其他序列转为列表 - List = [obj1, obj2,...] - 列表推导式 3. 列表推导式 - 推导式是可以从一个数据序列构建另一个新的数据序列的结构体,可以快速生成序列。 - 列表推导式: ```python [i for i in range(5)] # [O,1,2,3,4] [i for i in range(5) if i%2] # [1,3] [(x,y) for x in range(5) if x%2==0 for y in range(5) if y%2==1] # [(O,1),(O,3),(2,1),(2,3),(4,1),(4,3)] ``` 4. 列表常用操作 操作|解释|示例 :--:|---|--- 增加|list.append(obj):将参数内的对象添加至列表的尾部|a=[1,2];a.append(3);a输出[1,2,3] 增加|list.insert(index, obj):将对象插入到列表的index位置|a=[1,2];a.insert(O,3);a输出[3,1,2] 增加|list.extend(iter):将可迭代对象的每个元素逐个插入列表的尾部|a=[1,2];a.extend([3,4]);a输出[1,2,3,4] 删除|list.pop([index]):删除下标为index的元素,并将其返回(不传参数,默认删除最后一位元素)|a=[1,2];b=a.pop(1);a,b输出[1],2 删除|list.remove(obj):删除列表中第一个出现的给定元素|a=[1,2];a.remove(2);a 输出[1] 查找|list.index(obj):返回给定元素第一次出现位置的下标|a=[1,2];a.index(2);a 输出1 排序|list.sort():对列表进行排序,默认是升序|a=[3.1,2];a.sort();a输出[1,2,3] 逆序|list.reverse(:将列表中的元素进行逆置(直接修改列表本身)|a=[3,1,2];a.reverse();a 输出[2,1,3] 数量统计|list.count(obj):返回给定元素出现的次数|a=[3,1,2,1];a.count(1)输出2 5. 列表与数组 - Python中的列表在外观上和数组是有些相似的,但是两者并不是一种结构: - Python的内置数据结构中并没有数组。需要借助于工具包numpy实现。 - 列表可以和数组相互转化,但是本质是不一样的。 ##### 字典 1. Dictionary(字典) - 字典的每个元素由两部分组成-键和值,所以字典的元素也被称为键值对。 - 其中键是不可变且唯一的。 - 如果字典有相同的键,则后面的键对应的值会将前面的值覆盖。 - 数据量大时,字典数据的访问速度比列表块。 - 字典是无序可变的序列。 2. 创建字典 - 字典由一对花括号包裹,元素由逗号隔开。常见的字典创建方式: - Dict = {key:value,} - Dict = dict(key=value,) - Dict = dict([(key,value),]) - 字典推导式 3. 字典常用操作 操作|解释|示例 :---:|---|--- 获取|dict.get(key,default=None):根据键获取值,键不存在时返回默认值|Dict={'a':1,'b':2}; Dict.get('a')输出1 获取|dict.items():返回一个包含所有(键,值)元组的列表|Dict={'a':1,'b':2}; Dict.items() 输出dict_items([('a',1),('b',2)]) 获取|dict.keys():返回一个所有键组成的列表|Dict={'a':1,'b':2}; Dict.keys() 输出dict_keys(['a', 'b']) 获取|dict.values():返回一个所有值组成的列表|Dict={'a':1,'b':2}; Dict.values() 输出dict_values([1,2]) 添加|dict[key] = value:增加键值对{key:value},若key已存在,则修改现有key的值|Dict={'a':1,'b':2}; Dict['a']=3; Dict输出{'a':3,'b':2} 更新|dict.update(dict1):使用dict1对字典进行更新|Dict={'a':1,'b':2};Dict2={'a:3,c':3}; Dict.update(Dict2); Dict输出{'a': 3,'b': 2,'c': 3} 删除|dict.pop(key):删除并返回key对应的值|Dict={'a':1,'b':2};a=Dict.pop('a') ; Dict,a输出({'b': 2},1) 删除|dict.popitem()∶随机删除并返回一个键值对|Dict={'a':1,'b':2];a=Dict.popitem(); Dict,a输出({'a': 1}, ('b',2)) 删除|dict.clear()∶清空字典|Dict={'a':1,'b':2}; Dict.clear(); Dict输出{} ##### 集合 1. Set(集合) - 集合中的元素是唯一的,重复的元素会被删除。 - 集合是由一个花括号包裹,内部元素以逗号隔开。声明一个集合的方式有: - Set = set() - Set = {obj1,obj2,..} 2. 集合的运算。逻辑运算: - 交集set1 & set2:两个集合中相同的元素。 - 对称差集set1 ^ set2:两个集合中不同的元素。 - 并集set1 | set 2:两个集合内总共的元素(重复的删除)。 - 差集set1 - set 2:集合一中包含而集合二中不包含的元素。 3. 集合常用操作 操作|解释|示例 ---|---|--- 添加|set.add(obj):添加元素,如果元素已存在,则不会进行任何操作||Set={1,2,3};Set.add(4); Set输出{1,2,3,4} 添加|set.update(obj):添加对象可以是列表,字典等,且可以是多个,用逗号隔开|Set={1,2};Set.update({2,3});Set输出{1,2,3} 删除|set.remove(obj):移除元素(移除不存在元素是 会抛出异常)|Set={1,2};Set.remove(1);Set输出{2} 删除|set.discard(obj):删除元素(元素不存在时不会抛出异常)。|Set={1,2);Set.discard(1);Set输出{2} 删除|set.clear():清空集合。|Set={1,2);Set.clear();Set输出set() 删除|set.pop()︰随机删除一个元素|Set={1,2};a=Set.pop();Set,a输出({2}, 1) --- ### 3.2 Python中数据的常用操作 ##### 数据拷贝 1. 数据引用产生的问题 - 在Python中变量名是对于数据的引用。 - L2=L1,只是将L2指向了L1所指向的地址。 2. 数据拷贝 - 在Python中为了防止上述问题出现,可以使用拷贝的生成一份新的数据。 > 但 .copy()在拷贝嵌套列表时,还是会存在当修改一个时,另一个也会改变的问题 3. 深拷贝和浅拷贝 - 在Python中对于数据的拷贝可以根据拷贝形式的不同分为深拷贝和浅拷贝。 - 浅拷贝(copy()),即对数据的表面结构进行拷贝,如果数据为嵌套的结构,则嵌套结构里面的元素是对之前数据的引用。修改之前的数据会影响拷贝得到的数据。 - 深拷贝,解决了嵌套结构中深层结构只是引用的问题,它会对所有的数据进行一次复制,修改之前的数据则不会改变拷贝得到的数据 - 实现深拷贝:导入Python中的copy模块,使用模块中的deepcopy()方法。 ##### 运算符 1. 运算符 - Python运算符大致可分为7种,即算术运算符、比较运算符、赋值运算符、逻辑运算符、位运算符、成员运算符以及身份运算符。 2. 比较运算符 - Python 也提供了6种比较运算符:>(大于), (小于),==(等于), ! =(不等于),>=(大于等于) ,=(小于等于)。比较运算的结果是一个布尔值,True或者False: 3. 赋值运算符 - Python形成了丰富的赋值运算符: =、+=、-=、/=、%=、*=、 > python 没有自增,自减运算符 4. 逻辑运算符 - Python 中3种逻辑运算符分别为: and (与), or(或) , not(非),逻辑运算的结果是布尔值,True或者False : - A and B:当A为False时,运算结果为False,否则返回B的值。 - A or B:当A为True时,运算结果为A的值,否则返回B的值。 - not A:当A为True时,返回False,否则返回True。 5. 位运算符 - Python中有6种位运算符: - (&)︰按位与运算符,参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0; - (|)︰按位或运算符,只要对应的二个二进位有一个为1时,结果位就为1; - (^ ):按位异或运算符,当两对应的二进位相异时,结果为1; - (~)︰按位取反运算符,对数据的每个二进制位取反,即把1变为0,把O变为1; - (>>)︰右移动运算符,把>>左边的运算数的各二进位全部右移若干位,>>右边的数指定移动的位数; - () ︰左移动运算符,运算数的各二进位全部左移若干位,由右边的数指定移动的位数,高位丢弃,低位补0。 6. 成员运算符 - 除了上文介绍的5种运算符,Python还支持成员运算符。Python中有如下数据结构:字符串、列表、元组、字典。字符串、列表、字典,它们就像一个集合,其中包含若干元素,这些元素就是集合的成员,对于一个给定的元素,它有可能在一个给定的集合中,也可能不在,Python中采用成员运算符来判断元素是否属于成员,成员运算的结果为布尔值,True或者False。 > not in 不在 7. 身份运算符 - 身份运算符用于比较两个标识符所引用对象的存储单元,计算结果为布尔值,包含两个运算符:is和is not,分别用于判断两个标识符是否引用自一个对象。 - is 与==区别: - is 用于判断两个变量引用对象是否为同一个,==用于判断引用变量的值是否相等。 --- ### 3.3数据结构基础 1. 数据结构 - 数据结构是软件开发中最基础的部分,也是较为重要的部分,常见的数据结构有 - 线性表 - 数组 - 链表 - 队列 - 树 - 图 - 堆、栈 - 散列表 2. 顺序存储结构 - 特点:用物理相邻的位置关系表示其逻辑关系 3. 链式存储结构 - 链式存储结构中,每一数据元素均使用一个结点来存储,并且每个结点的存储空间是单独分配的,因此存储这些结点的空间不一定是连续的。 - 在链式存储结构中,我们不仅需要存储数据元素本身,还需要存储数据元素之间的逻辑关系,即将结点分为两部分,一部分是存储数据元素本身的,我们称其为数据域;另一部分是存储下一个结点的地址(即存储逻辑关系)的,我们称其为指针域。通过将每一个结点的指针域链接起来,从而形成链式存储结构。 4. 树形结构 - 树形结构是是一个或多个节点的有限集合,也是一种非线性结构。 5. 图结构 - 图(Graph)结构是一种非线性的数据结构,图在实际生活中有很多例子,比如交通运输网,地铁网络,社交网络,计算机中的状态执行(自动机)等等都可以抽象成图结构。图结构H树结椒有杂的非线性结构。 - 顶点(vertex):一图中的数据元素。 - 边(edge): - 图中连接这些顶点的线。 --- --- ### 4.1判断语句 1. 如果...就... - 如果某些条件满足,才能做某件事情;条件不满足时,则不能做,这就是所谓的判断。 2. 程序中的如果...就... - 在Python中实现如果,使用的是关键字if。 - Python中的条件控制是通过条件语句的执行结果(True或者False)来决定执行的代码块。 3. Python中的对与错 - False: - o - None - []、()、{} - "" - True: - 除False以外的任意对象 3. elif - Python中使用if来控制程序的执行,如果有多个条件分支的判断,可以使用if -elif -else的形式。 ```python if 判断条件1: 执行语句1 elif 判断条件2: 执行语句2 else: 执行语句3 ``` 4. 判断语句的小技巧 - 使用隐式的判断条件。 - 将最可能出现的判断放在前面。 - 避免深层次的判断嵌套。 - 避免无意义的判断。 --- ### 4.2循环语句 1. 复读机 - 对于需要重复执行的任务,判断语句不适合使用,取而代之的是循环语句。 - 循环语句可以根据设置的循环次数,来执行相同的代码块。 - 设置循环次数同样需要判断条件。 - Python中的循环语句分为for循环和while循环。 2. 循环语句– for - Python中的for语句与其他语言中的for语句不太一样,它接受可迭代对象(例如序列)作为其参数,每次迭代其中的一个元素。。-- 可以在for循环后面加入else语句块,在循环结束时执行。 - for语句的用法: ``` for iter in iters: 循环语句块 else: 语句块 ``` 3. 循环语句- while - Python语言中while语句用于执行循环程序,在某条件下,循环执行某段程序,以处理需要重复处理的相同任务。 - 可以在while后面加入else语句块,在条件为假时执行。 - while语句的用法: ``` while条件语句: 循环执行的语句块 #条件为真时执行 else: 语句块。 #条件为假时执行 ``` 4. continue - 在Python中使用continue实现本次循环的跳过。 - continue语句用来告诉Python跳过当前循环的剩余语句,然后继续进行下—轮循环。 - continue语句可用在while和for循环中。 5. break - Python中使用break来结束整个循环。 - break语句结束整个循环。如果触发了break,则当前循环终止(循环对应的else也不会执行) 6. 嵌套循环 > break 和 continue 在嵌套循环中的作用位置 7. 死循环与空循环 - 空循环,即在循环任务中循环体是空的,不执行任何任务。 - 会导致系统CPU占用了高; - 浪费计算资源; 8. 递归 - 递归,程序调用自身的编程技巧称为递归,它通常把一个大型的复杂的问题转化为一个与原问题相似的规模较小的问题来解决 ---