公司动态
Python从入门到精通 第五章(组合数据类型)
一、组合数据类型的分类1、集合类型1集合类型是一个元素集合元素之间无序相同元素在集合中唯一存在。2Python中的集合类型与数学中的集合概念一致即包含0个或多个数据项的无序组合集合中的元素不可重复元素类型只能是不可变数据类型例如整数、浮点数、字符串、元组等列表、字典和集合类型本身都是可变数据类型不可作为集合的元素。2、序列类型1序列类型是一维元素向量元素之间存在顺序关系通过序号访问其中的元素元素之间不排它他也就是可以有相同元素。2Python提供了多种序列数据类型比较重要的是字符串类型、列表类型和元组类型。字符串类型可以看成是若干个单一字符的有序组合元组和列表可以看成是多种类型元素的有序组合。3序列类型使用相同的索引体系即正向递增序号和反向递减序号这个体系在第三章“字符串的索引”一节有介绍该体系同样适用于列表和元组。列表类型和元组类型的切片操作和字符串类型的切片操作基本相同此处不再重复赘述。4序列类型有一些通用的操作符和函数如下所示操作符用法描述inx in s如果x是序列s的元素返回True否则返回Falsenot inx not in s如果x不是序列s的元素返回True否则返回Falses t返回连接序列s和序列t的结果*s * n 或n * s返回序列s复制n次并拼接的结果s[i]索引返回序列s的第i个元素s[i:j]切片返回包含序列s第i到j个元素的子序列不包含第j个元素s[i:j:k]步骤切片返回包含序列s第i到j个元素以k为步长的子序列len(s)返回序列s的元素个数序列s的长度min(s)返回序列s中的最小元素max(s)返回序列s中的最大元素s.index(x)返回序列s中第一次出现元素x的位置s.count(x)返回序列s中出现x的总次数3、映射类型1映射类型是“键-值”数据项的组合每个元素是一个键值对表示为“keyvalue”元素之间是无序的。2键值对“keyvalue”是一种二元关系源于属性和值的映射关系。键key表示一个属性也可以理解为一个类别或项目值value是属性的内容。键值对将映射关系结构化用于存储和表达。3映射类型是序列类型的一种扩展在序列类型中采用从0开始的正向递增序号进行具体元素值的索引而映射类型则由用户来定义序号即键用其去索引具体的值。4Python提供了专门的映射类型即字典类型。二、集合类型1、集合的定义1Python中的集合本质是元素的无序组合其类型用大括号“{}”表示它没有索引和位置的概念集合中的元素可以动态增加或删除。由于集合中的元素是无序的集合的输出顺序与定义顺序可以不一致。2集合中的元素不可重复元素类型只能是固定数据类型可理解为C语言中的常量。由于集合元素独一无二使用集合类型能够过滤掉重复元素。3将集合类型变量传入type函数返回的集合类型标记为“set”。2、集合的创建1直接赋初值创建集合①利用大括号{}直接创建集合。②由于集合类型和字典类型都用大括号标记所以采用大括号方式创建集合时必须赋初值不能创建空集合否则只能创建空字典。2set函数创建集合①set(x)函数可以根据参数x创建集合类型要求参数x是组合数据类型如列表或字符串等。②如果参数x中存在重复元素创建后的集合会自动去重。③空集合用set()表示。3set函数只接收1个参数它会分解该参数将输入的序列分解为多个元素然后进行去重形成集合{}可以接收多个参数每个参数会被当作一个独立元素不会再被分解。3、集合的操作符操作符的运算描述S-T返回一个新集合包括在集合S中但不在集合T中的元素ST返回一个新集合包括同时在集合S和T中的元素S^T返回一个新集合包括集合S和T中的非共同元素S|T返回一个新集合包括集合S和T中的所有元素4、集合的操作函数函数或方法描述S.add(x)如果数据项x不在集合S中将x增加到S中S.clear()移除S中所有数据项S.discard(x)移除指定元素x指定元素不存在不会报错S.pop()随机移除并返回某个元素S.remove(x)如果x在集合S中移除该元素如果不在则产生KeyError异常S.update(S1)将一个集合S1中的元素加入另一个集合S中len(S)返回集合S的元素个数x in S如果x是S的元素返回True否则返回Falsex not in S如果x不是S的元素返回True否则返回False三、列表类型1、列表的定义1List列表是Python中使用最频繁的数据类型在其它语言中通常叫做数组当然Python中是没有数组这个概念的列表与数组最大的区别就是列表中的元素可以是不同类型的。2列表用“[]”定义数据之间使用“,”分隔。3列表的索引从0开始。①索引就是数据在列表中的位置编号又称为下标。②从列表中取值时如果超出索引范围程序会报错。2、列表常用操作1列表的基本使用name_list [zhangsan, lisi, wangwu] # 创建列表 # 1. 取值和取索引 # list index out of range - 列表索引超出范围 # 列表指定的索引超出范围程序会报错 # 例如print(name_list[3]) print(name_list[2]) # 知道数据的内容想确定数据在列表中的位置如果该数据出现多次会得到第一次出现的位置 # 使用index方法需要注意如果传递的数据不在列表中程序会报错 print(name_list.index(wangwu)) # 2. 修改 name_list[1] 李四 # list assignment index out of range # 列表指定的索引超出范围程序会报错 # 例如name_list[3] 王小二 # 3. 增加 # append 方法可以向列表的末尾追加数据 name_list.append(王小二) # insert 方法可以在列表的指定索引位置插入数据 name_list.insert(1, 小美眉) # extend 方法可以把其他列表中的完整内容追加到当前列表的末尾 temp_list [孙悟空, 猪二哥, 沙师弟] name_list.extend(temp_list) # 4. 删除 # remove 方法可以从列表中删除指定的数据 name_list.remove(wangwu) # pop 方法默认可以把列表中最后一个元素删除 name_list.pop() # pop 方法可以指定要删除元素的索引 name_list.pop(3) # clear 方法可以清空列表 name_list.clear() print(name_list)2del关键字name_list [张三, 李四, 王五] # (知道即可)使用 del 关键字(delete)删除列表元素 # 提示在日常开发中要从列表删除数据建议使用列表提供的方法 del name_list[1] # del 关键字本质上是用来将一个变量从内存中删除的 name 小明 del name # 注意如果使用 del 关键字将变量从内存中删除 # 后续的代码就不能再使用这个变量了 # print(name) print(name_list)3列表的数据统计name_list [张三, 李四, 王五, 王小二, 张三] # len(length 长度) 函数可以统计列表中元素的总数 list_len len(name_list) print(列表中包含 %d 个元素 % list_len) # count 方法可以统计列表中某一个数据出现的次数 count name_list.count(张三) print(张三出现了 %d 次 % count) # 从列表中删除第一次出现的数据如果数据不存在程序会报错 name_list.remove(张三) print(name_list)4列表排序name_list [zhangsan, lisi, wangwu, wangxiaoer] num_list [6, 8, 4, 1, 10] # 升序 name_list.sort() num_list.sort() # 降序 name_list.sort(reverseTrue) num_list.sort(reverseTrue) # 逆序反转 name_list.reverse() num_list.reverse() print(name_list) print(num_list)5列表遍历name_list [张三, 李四, 王五, 王小二] # 使用迭代遍历列表 顺序的从列表中依次获取数据每一次循环过程中数据都会保存在 my_name 这个变量中在循环体内部可以访问到当前这一次获取到的数据 for my_name in 列表变量: print(我的名字叫 %s % my_name) for my_name in name_list: print(我的名字叫 %s % my_name)6对于基本的数据类型如整数或字符串可以通过等号实现元素赋值但对于列表类型使用等号是无法实现真正的赋值的如下所示IsIt语句并不是拷贝It中的元素给变量Is而是新关联了一个引用即Is和It所指向的是同一套内容要想达到复制列表的效果需要借助copy方法。It [2005,08,03] Is It It.clear() # 清空It print(Is) It [2005,08,03] Is It.copy() It.clear() # 清空It print(Is)四、元组类型1、元组的定义1Tuple元组与列表类似不同之处在于元组在创建完之后就不能修改。2元组用“()”定义元素之间使用“,”分隔。3元组的索引从 0 开始索引就是数据在元组中的位置编号。2、元组的创建1创建普通元组info_tuple (zhangsan, 18, 1.75)2创建空元组info_tuple ()3创建只包含一个元素的元组需要在那一个元素后面添加逗号否则创建的数据类型不是元组info_tuple (zhangsan,)3、元组常用操作1元组的基本使用和数据统计info_tuple (zhangsan, 18, 1.75, zhangsan) # 1. 取值和取索引 # 根据下标访问元组中的元素 print(info_tuple[0]) # 已经知道数据的内容希望知道该数据在元组中的索引 print(info_tuple.index(zhangsan)) # 2. 统计计数 # 统计元组中某个元素出现的次数 print(info_tuple.count(zhangsan)) # 统计元组中包含元素的个数 print(len(info_tuple))2元组遍历在实际开发中除非能够确认元组中的数据类型否则针对元组的循环遍历需求并不是很多info_tuple (zhangsan, 18, 1.75) # for 循环内部使用的变量 in 元组 for item in info: 循环内部针对元组元素进行操作 print(item) # 使用迭代遍历元组 for my_info in info_tuple: print(my_info)4、元组的应用场景1函数的参数和返回值一个函数可以接收任意多个参数参数类型为元组类型其中的元素就是需要接收的参数或者一次返回多个数据返回值类型为元组类型其中的元素就是需要返回的数据。def measure(): 测量温度和湿度 print(测量开始...) temp 39 wetness 50 print(测量结束...) # 元组-可以包含多个数据因此可以使用元组让函数一次返回多个值 # 如果函数返回的类型是元组小括号可以省略 # return (temp, wetness) return temp, wetness # 元组 result measure() print(result) # 需要单独的处理温度或者湿度 - 不方便 print(result[0]) print(result[1]) # 如果函数返回的类型是元组同时希望单独的处理元组中的元素 # 可以使用多个变量一次接收函数的返回结果 # 注意使用多个变量接收结果时变量的个数应该和元组中元素的个数保持一致 gl_temp, gl_wetness measure() print(gl_temp) print(gl_wetness)2让列表不可以被修改以保护数据安全。3格式字符串格式化字符串后面的“()”本质上就是一个元组。info_tuple (小明, 21, 1.85) # 格式化字符串后面的 () 本质上就是元组 print(%s 年龄是 %d 身高是 %.2f % info_tuple) info_str %s 年龄是 %d 身高是 %.2f % info_tuple print(info_str)4在Python中可以将一个元组使用赋值语句同时赋值给多个变量变量的数量需要和元组中的元素数量保持一致。# 交换两个数字 a 6 b 100 # 解法1-使用其他变量 # c a # a b # b c # 解法2-不使用其他的变量 # a a b # b a - b # a a - b # 解法3-Python 专有 # a, b (b, a) # 提示等号右边是一个元组只是把小括号省略了 a, b b, a print(a) print(b)5、元组和列表之间的转换1使用list函数可以把元组转换成列表列表作为返回值不影响原本的元组变量名 list(元组)2使用tuple函数可以把列表转换成元组元组作为返回值不影响原本的列表变量名 tuple(列表)五、字典类型1、字典的定义1dictionary字典是除列表以外 Python之中最灵活的数据类型。2字典同样可以用来存储多个数据通常用于存储描述一个物体的相关信息。3和列表的区别列表是有序的对象集合字典是无序的对象集合。4字典用“{}”定义。5字典使用键值对存储数据键值对之间使用“,”分隔。①键key是索引值value是数据。②键和值之间使用“:”分隔。③键必须是唯一的也就是不能有重复。④值可以取任何数据类型但键只能使用字符串、数字或元组。{键1:值1,键2:值2,…,键n:值n}6可以简单地把字典看成元素是键值对的集合。# 字典是一个无序的数据集合使用print函数输出字典时通常 # 输出的顺序和定义的顺序是不一致的 xiaoming {name: 小明, age: 18, gender: True, height: 1.75, weight: 75.5} # 创建字典 print(xiaoming)2、字典常用操作1基本使用xiaoming_dict {name: 小明} # 创建字典 # 1. 取值 print(xiaoming_dict[name]) # 在取值的时候如果指定的key不存在程序会报错 # print(xiaoming_dict[name123]) # 2. 增加/修改 # 如果key不存在会新增键值对 xiaoming_dict[age] 18 # 如果key存在会修改已经存在的键值对 xiaoming_dict[name] 小小明 # 3. 删除 xiaoming_dict.pop(name) # 在删除指定键值对的时候如果指定的key不存在程序会报错 # xiaoming_dict.pop(name123) print(xiaoming_dict)2其它操作xiaoming_dict {name: 小明, age: 18} # 1. 统计键值对数量 print(len(xiaoming_dict)) # 2. 合并字典 temp_dict {height: 1.75, age: 20} # 注意如果被合并的字典中包含已经存在的键值对会覆盖原有的键值对 xiaoming_dict.update(temp_dict) # 3. 清空字典 xiaoming_dict.clear() print(xiaoming_dict)3循环遍历xiaoming_dict {name: 小明, qq: 123456, phone: 10086} # 迭代遍历字典 # 变量k是每一次循环中获取到的键值对的key for k in xiaoming_dict: print(%s - %s % (k, xiaoming_dict[k]))六、字符串1、字符串的定义1字符串就是 一串字符是编程语言中表示文本的数据类型。2在Python中可以使用一对双引号或者 一对单引号定义一个字符串。3可以使用索引获取一个字符串中指定位置的字符索引计数从0开始也可以使用for 循环遍历字符串中每一个字符。str1 hello python str2 我的外号是大西瓜 print(str2) print(str1[6]) # 字符串的遍历 for char in str2: print(char)2、字符串的常用操作1字符串的统计操作hello_str hello hello # 1. 统计字符串长度 print(len(hello_str)) # 2. 统计某一个小子字符串出现的次数 print(hello_str.count(llo)) print(hello_str.count(abc)) # 3. 某一个子字符串出现的位置 print(hello_str.index(llo)) # 注意如果使用index方法传递的子字符串不存在程序会报错 print(hello_str.index(abc))2字符串的判断方法# 1. 判断空白字符 space_str \t\n\r print(space_str.isspace()) # 2. 判断字符串中是否只包含数字 # 1 以下三个方法都不能判断是否包含小数 # num_str 1.1 # 2 unicode 字符串 # num_str \u00b2 # 3 中文数字 num_str 一千零一 print(num_str) print(num_str.isdecimal()) print(num_str.isdigit()) print(num_str.isnumeric())3查找和替换4大小写转换5文本对齐6去除空白字符7拆分和连接七、公共方法1、Python内置函数2、切片3、运算符注意①in在对字典操作时判断的是字典的键。②in和not in被称为成员运算符成员运算符用于测试序列中是否包含指定的成员。③in和not in也支持集合数据类型上表中没有体现。