数据结构
Python 提供了一些基本的数据结构:
- 字符串
- 列表
- 元组
- 字典
- 集合
他们都是可迭代的类型,迭代是一种数学概念,指的是重复反馈过程的活动,对于计算机程序来讲,就是执行重复的循环,而 for 循环需要一个迭代类型的数据才能够进行循环操作,同时迭代又可分为有序和无序
有序的序列指的是字符串,列表,元组,指它们的成员都是有序排列,并且可以通过下标偏移量访问它们的每一个成员,无序的序列指的是字典、集合,它们的成员排列是无序的,不能通过下标访问成员
下标
下标也叫索引,可以通过[索引值]
操作符访问序列中的每一个或多个成员,下标都是从 0 开始从左到右递增,但 Python 也提供了反向索引,从 -1 开始从右到左递减
字符串
字符串是一堆字符组成的序列,通过单引号或双引号定义,字符串属于不可变序列类型
foo = 'hello'
bar = "helloworld"
foo[4] # o
字符串常用方法
- 判断类
- string.isspace():只有空格则返回 True
- string.isalnum():至少有一个字符,并且所有的字符都是字母或数字则返回 True
- string.isalpha():至少有一个字符,并且所有的字符都是字母则返回 True
- string.isdecimal():只包含数字则返回 True,全角数字,不能判断小数
- string.isdigit():只包含数字则返回 True,全角数字,Unicode,转义数字,不能判断小数
- string.isnumeric():只包含数字则返回 True,全角数字,中文数字,不能判断1.
- string.istitle():如果 String 是标题化(每个单词的首字母大写)则返回 True
- string.islower():所有的字符都是小写则返回 True
- string.isupper():素有的字符都是大写则返回 True
- 查找和替换类
- string.count(c):返回子串在字符串中出现的次数
- string.startswith(str):检查字符串是否以 str 开头,是就返回 True
- string.endswith(str):检查字符串是否以 str 结尾,是就返回 True
- string.find():查找字符串出现的索引位置,不存在则返回 -1
- string.rfind():查找反向索引,不存在则报错
- string.index():查找字符串出现的索引位置,不存在则报错
- string.rindex():查找反向索引,不存在则报错
- string.replace(old_str, new_str):替换指定字符串,返回新的字符串
- 大小写转换
- string.capitalize():将字符串第一个字符转为大写
- string.title():将字符串中的每一个单词首字母转为大写
- string.lower():所有的字符转换位小写
- string.upper():所有的字符转换为大写
- string.swapcase():反转所有的字符大小写
- 文本对齐
- string.ljust(width):返回左对齐的字符串,并用空白字符填充长度至 width 的新字符串
- string.rjust(width):返回右对齐的字符串,并用空白字符填充长度至 width 的新字符串
- string.center(width):返回居中对齐的字符串,并用空白字符填充长度至 width 的新字符串
- 去除空白字符
- string.lstrip():去除左边开始的空白字符
- string.rstrip():去除右边开始的空白字符
- string.strip():去除左右两边空白字符
- 拆分和连接
- string.partition(str):
- string.rpartition(str):
- string.split(str):将一个字符串拆分成一个列表返回
- string.splitlines(str):
- str.join(seq):将字符串作为分隔符,拼接可迭代类型并返回新字符串
字符串的转义
Python 会将字符串中的\
看做成转义符号,用来表示一些不能够显示的特殊符号,比如将\n
看作成一个换行
列表
列表(List)是 Python 中使用最频繁的数据类型,在其他语言中叫做数组,列表属于可变序列类型,可以通过赋值运算符修改成员,列表专门用于存储一串数据,用[]
来定义,数据之间用,
分隔,可以存放不同类型数据
name_list = ["zs", 23, "男"]
name_list[1] # 23
列表常用方法
- list.index(value):获取元素在列表中的索引,如果有则返回索引值,没有则报错
- list.append(value):追加一个元素到列表末尾
- list.insert(index, value):指定位置添加一个元素
- list.extend(iterable):该方法接收一个迭代器类型,会将该迭代器中的元素添加到列表
- list.remove(value):移除第一次出现的指定值
- list.pop():默认移除列表中最后一个元素,并返回该元素,也可以指定索引,移除并返回该元素
- list.clear():移除所有的元素
- list.sort(<reverse=True>):对列表中的元素进行升序/降序排序
- list.reverse():反转列表中所有的元素
- list.count(value):返回列表中元素出现的次数
- del list[index]:通过
del
关键字移除指定元素
元组
元组(Tuple)和列表类似,属于不可变序列类型,不能通过赋值运算符来修改成员,通过()
来定义,元组只包含一个元素时,需要在元素后面添加一个逗号
id = (101, 102)
id[0] # 101
元组常用方法
- tuple.count(value):返回一个数据在元组中出现的次数
- tuple.index(value):返回元素在元素中的索引
字典
字典(dictionary)是除列表之外最灵活的数据类型,字典也可以存储多个数据,只不过是以键值对形式来存储数据的,通过{}
定义,且键值对必须用:
分割,键必须是不可变类型。字典属于无序类型,通过键来访问成员
foo = {
"name": "foo",
"age": 21
}
foo["name"] # 取出键对应的值,如果指定键不存在则报错
提示
字典是一种无序的数据集合,用 print 函数打印字典时并不会按照定义的顺序一样输出
字典常用方法
- dic.get(key, 默认值):返回 key 对应的值,不存在就返回默认值
- dic.pop(key):移除指定键的值
- dic.update(temp_dict):合并字典,如果有相同的键值对,会被覆盖掉
- dic.clear():清空字典
集合
Python 的集合,和数学中的集合一样,用于保存不重复的元素,每一个元素都是唯一的,Python 将每个集合元素放入{}
中,元素通过,
分隔,集合只能存储不可变类型,否则会抛出 TypeError
{1, 2, 3, 4}
即使在集合中存储了相同的元素,但是集合只会保留一份
>>> {1, 2, 3, 4, 1}
{1, 2, 3, 4}
警告
使用{}
创建集合时,如果只有一个元素,必须在元素后面加上,
除了使用{}
创建集合以外,还可以通过 Python 提供的内置函数 set 来创建,set 函数会将可迭代对象转换成集合,比如:
>>> set("hello")
{"h","e","l","l","o"}
由于集合是无序的,无法通过下标访问,只能被当作迭代对象遍历
set 集合操作
set 集合可以通过 add 方法实现增加元素,但是必须是不可变类型
同样的,也提供了 remove 方法删除元素,如果不存在则会抛出 KeyError 错误,如果不想抛出错误,也可以使用 discard 方法,使用效果和 remove 一样
集合的运算
集合最常用的操作就是做一些数学上的交集,并集,差集以及对称差集运算
操作 | 运算符 | 含义 |
---|---|---|
交集 | & | 取公共元素 |
并集 | | | 取所有元素 |
差集 | - | 取一个集合中另一个集合没有的元素 |
对称差集 | ^ | 取两个集合中不属于两个集合的交集的元素 |
可变和不可变类型
Python 中一切皆对象,可变指的是对象的内容可变,而不可变是指对象的内容不可变,比如字符串的内容不可变,列表的内容可变,元组的内容不可变
切片操作
切片是 Python 提供的一种高级语法,用来取出有序序列类型的指定数据,比如:字符串、列表、元组,切片通过索引来指定范围,从一个大的序列类型切出小的序列类型数据
slice[开始索引:结束索引:步长]
步长用于指定隔几个索引取一次数据,可以省略不写,默认为 1,当步长为正时,从左至右切片,为负时,从右至左切片
str = "0123456789"
str[2:6] # 2345
str[2:] # 23456789
str[:4] # 0123
str[:] # 0123456789
str[::2] # 02468
str[1::2] # 13579
str[::-1] # 9876543210
str[-1:-6] # 98765