博客主要用于自学记录,内容参考国科大张晋连老师的Python编程课的课件
第六章 数据结构
目录
6.1 序列概述
Python 提供了功能强大的内置数据结构,包括:
- 字符串
- 列表
- 元组
- 字典
- 集合
6.2 序列通用操作
其中字符串、列表和元组都属于序列
序列有一些通用操作,包括:
- 索引(Indexing)
- 切片(slicing)
- 链接(adding)
- 重复(mulitiplying)
- 检查某个元素是否属于序列的成员
- 计算序列长度
- 找出最大元素和最小元素等
序列相关操作 :
- 标准类型运算符
- 值比较:> < >= <= == !=
- 对象身份比较:is is not
- 布尔运算:not and or
- 序列类型运算符
- 序列中的所有元素都有编号。从0开始递增。这些元素可以通过编号分别访问。索引有正索引和负索引,可以根据实际情况选用。
- 获取
- 重复
- 连接
- 判断
- 序列中的所有元素都有编号。从0开始递增。这些元素可以通过编号分别访问。索引有正索引和负索引,可以根据实际情况选用。
- 内置函数
- 序列类型转换内置函数
- list() new empty list
- list(iterable) new list initialized from iterable's items
- tuple() empty tuple
- tuple(iterable)
- 序列类型其他常用内置函数
- enumerate() 同时获取序列索引及值
- len()
- max()
- min()
- reversed() 逆向循环序列
- sorted()
- sum()
- zip() 同时循环两个或者多个序列
- 序列类型转换内置函数
6.3 字符串概述
- 在Python中,字符串是除数字外最重要的数据类型。
- 可充分利用索引和切片-用于从字符串中提取子串
- 虽然Python字符串提供了众多实用的函数,但实际处理字符串时,常常需要更强大的工具。
- Python提供了一个第三方库re,进行正则表达式处理,用于处理复杂字符串。
6.4 字符串格式化
在使用print语句输出数据时,可以按照定制的格式进行输出,Python提供了一些字符串格式化方法:
- 类似C语言的格式化方法,使用%
- C语言使用函数Printf()格式化输出结果,Python也提供了类似功能
- Python将若干值插入带有“%”标记的字符串中,从而可以按照指定格式输出字符串
- 语法:
-
"%s" % str1
"%s %s" % (str1, str2)
-
在字段宽度和精度之间还可以放置一个“标志”,该标志可以是加号(可显示数字的正负号)、减号(左对齐,默认右对齐)、零(表示数字空位将会用0填充)
-
- format()方法
-
<模板字符串>.format(<逗号分隔的参数>)
-
其中:<模板字符串>由一系列的槽组成,用来控制修改字符串中嵌入值的位置,其基本思想是将fromat()方法的<逗号分隔的参数>中的参数按照序号关系替换到<模板字符串>的槽中
-
槽用大括号{}表示,如果大括号中没有序号,则按照出现的顺序替换,如果大括号中指定了使用参数的序号,按照序号对应参数替换
-
槽中还可以使用关键字参数
-
带有格式信息的槽:
-
format方法中<模板字符串>的槽除了包括参数序号,还可以包括:格式控制信息。此时,槽的内部格式为:{<参数序号>: <格式控制标记>},其中<格式控制标记>用来控制参数显示时的格式。
-
<格式控制标记>包括:<填充><对齐><宽度>,<.精度><类型>6个字段(需按照此顺序排列)
-
<填充><对齐><宽度>是3个相关字段
-
<宽度>指当前槽的设定输出字符宽度,如果该槽对应的format()参数长度比<宽度>设定值大,则使用参数实际长度。如果该值的实际位数小于指定宽度,则位数将被默认以空格字符补充。
-
<对齐>值参数在<宽度>内输出时的对齐方式,分别使用< > ^ 三个符号表示左对齐、右对齐和居中对齐。
-
<填充>指<宽度>内除了参数外的字符采用什么方式表示,默认采用空格,可以使用<填充>更换
-
<格式控制标记>中逗号(,)用于显示数字的千位分隔符
-
<精度>表示两个含义,由小数点(.)开头。对于浮点数,精度表示小数部分输出的有效位数。对于字符串,精度表示输出的最大长度。
-
<类型>表示输出整数和浮点数类型的格式挥着
-
对于整数类型,输出格式包括6种
-
b:输出整数的二进制格式
-
c:输出整数对应的Unicode字符
-
d:输出整数的十进制格式
-
o:输出整数的八进制格式
-
x:输出整数的小写十六进制格式
-
X:输出整数的大写十六进制格式
-
- 对于浮点数类型,输出格式包括4种:
- e:输出浮点数对应的小写字母e的指数形式
- E:输出浮点数对应的大写字母E的指数形式
- f:输出浮点数的标准浮点形式
- %:输出浮点数的百分数形式
- 浮点数输出时京俩个使用<.精度>表示小数部分的宽度,有助于更好控制输出格式。
-
-
-
-
-
- 其他方法 (字符串的转义字符)
- 计算机中存在可见字符与不可见字符。可见字符是指键盘上的字母】数字和符号。不可见字符是指换行、回车、制表符等字符。
- 对于不可见字符,Python使用的方法类似于C语言,都是使用”\“作为转义字符
- Python还提供了函数Strip()、Istrip()、rstrip()去除转义字符串中的转义字符。
符号
描述
符号
描述
\\
反斜线
\t
横向制表符
\’
单引号
\o
后跟八进制数表示的2位ascii字符
\”
双引号
\x
后跟十六进制数表示的2位ascii字符
\n
换行符
\000
终止符,其后的字符串全部忽略
6.5 字符串方法
- Python字符串自带了大量很有用的方法(字符串类内定义的函数),可调用dir并将参数指定为任何字符串(如:dir('')来查看他们)
- 本章介绍常用的字符串方法
- 字符串测试
- 用于检测字符串是否为特定格式,他们组成了一个最大的字符串方法组
- 测试方法的值都返回True或者False。
- 字符串查找
- 方法index和find 之间的差别在于没有找到指定子串的情形。方法index引发异常ValueError,而方法find将返回-1.
- 字符串替换
- 使用替换方法可方便的删除字符串中的子串
方法名
返回的字符串
s.replace(old,new[,count])
将s中的每个old替换为new,若给出count,
则前count次的old被new替换
s.expandtabs(n)
将s中的每个制表符扩展为空格,空格宽度为n
- 使用替换方法可方便的删除字符串中的子串
- 字符串拆分
- 拆分方法将字符串拆分成多个子串。如下表所示。
方法名
返回的字符串
s.partition(t)
将s拆分为三个字符串(head、t和tail),
其中head为t前面的子串,tail为t后面的子串。
返回值为元组
s.rpartition(t)
与partition相同,但从s的右端开始搜索t。
返回值为元组
s.split(t=None, maxsplit=-1)
以t为分隔符,将s划分成一系列子串,
并返回一个由这些子串组成的列表。
默认分隔符为空白符(空格、换行、制表符);
若给出maxsplit参数,则只有maxsplit个分隔符有效,
默认值为-1,表示对分隔数无限制。
s.rsplit(t)
与split相同,但从s的右端开始搜索t
s.splitlines()
返回一个由s中的各行组成的列表
- 拆分方法将字符串拆分成多个子串。如下表所示。
- 改变大小写
- 对于所有字符串的方法,Python都创建并返回一个新的字符串,不会修改原字符串。
方法名
返回的字符串
s.capitalize()
将s[0]改为大写,其余小写
s.lower()
让s的所有字母都小写
s.upper()
让s的所有字母都大写
s.swapcase()
将小写字母改为大写,并将大写字母改为小写
s.title()
让s的大小写符合标题的要求
- 对于所有字符串的方法,Python都创建并返回一个新的字符串,不会修改原字符串。
- 设置字符串格式
-
方法名
返回的字符串
s.center(n,ch)
返回长度为n个字符的字符串,其中s位于中间,两边用字符ch填充
s.ljust(n,ch)
返回长度为n个字符的字符串,其中s位于左边,右边用字符ch填充
s.rjust(n,ch)
返回长度为n个字符的字符串,其中s位于右边,左边边用字符ch填充
s.zfill(n)
返回长度为n个字符的字符串,若字符串长度不足n,在左侧添加字符“0”,
但若s的最左侧字符是“+”或“-”,则从第二个字符左侧添加0
s.format(vars)
设置字符串格式。详见本章格式化字符串内容
-
- 字符串剥除
- 剥除方法用于删除字符串开头或末尾指定的字符。如下表所示
- 默认情况下,剥除空白字符(空白字符包括:空格本身、回车换行\n、制表符\t);如果制定了字符串参数,则剥除该字符串中的指定字符
- 若希望删除字符串s中所有空格,可以使用s。replace(' ','')。
方法名
返回的字符串
s.strip(ch)
从s开头和末尾删除指定字符ch
s.lstrip(ch)
从s开头(左端)删除指定字符ch
s.rstrip(ch)
从s末尾(右端)删除指定字符ch
- 字符串比较
- Python直接使用“==” “!=” 操作符比较两个字符串的内容。
- 若要比较字符串的部分内容,可以先截取子串,再使用“==”“!=”操作符进行比较
- 若是要比较字符串的开头和结尾部分,更方便的方式是 使用startswith()或endswith()函数
- 字符串的合并
- 之前介绍过,Python可使用“+”连接不同的字符串
- 除此之外,还可以使用Join方法(是split方法的逆方法)和reduce函数实现字符串的合并。
- 字符串与日期的转换
- 在实际应用中,经常需要将日期类型与字符串类型互相转换。
- Python提供了time模块处理日期和时间。time模块的函数strftime()可以实现从时间到字符串的转换。
- 声明:
strftime(format[, tuple])->string
-
说明:
– 参数 format 表示格式化日期的特殊字符。例如:“ %Y-%m-%d ”相当于“ yyyy -mm- dd ” .– 参数 tuple 表示需要转换的时间,用元组存储。元组中的元素分别表示年、月、日、时、分、秒、 …… 。– 函数返回一个表示时间的字符串。
- 声明:
- 字符串到时间的转换要进行两次转换,需要使用time模块的strptime()函数和datetime模块的datetime()函数。
- 格式化日期的常用标记