python - 数据结构
Python 基础数据结构
最近抽空考了一次计算机二级,虽然难度不高,但还是挺有收获的一件事。对于计算机二级的内容来说,不计算法成本的实现还是相对简单的,但通过这次考试可以很好的整理复习一下python的基础。
虽然python这两年用了很多,写了大大小小的文件几十个,不过其中很大一部分还是参考了前人的实现方法,以及采用IDLE的编译器调试上的不习惯(考试中花了十几分钟测试IDLE是否能正常运行,最终也没用会它debug模块,只能靠输出来简单查看变量),通过计算机二级对于只有几天复习的我来说还是充满挑战的。
组合数据类型大致可分为三种:
- 序列类型
- 集合类型
- 映射类型
组合数据类型可以将更多的数据组织起来,比单一表示的数据更有序,且更为容易理解
对于python来说,str,tuple,list这三种类都被认为是序列类型的数据
数字类型
python配置了三种基本的数据类型,分别是整型,浮点型和复数型
整数
整数是表述整数的数值,没有小数部分。在Python中,整数包括正整数、负整数和0,在Python中数值超过计算机自身的计算功能时会自动转用高精度计算。整数类型包括二进制、八进制、十进制和十六进制。
浮点数
浮点数大家在生活中也比较常见,例如1.5,26.37这种由整数和小数两部分组成。浮点数还可以通过科学计数法表示。例如 3.6e5,9.26e-2等,浮点数的数据类型为float。
Python中的浮点数和数学中的实数概念一致,且该数据类型必须带有小数部分,但小数部分可以是零。
复数
Python中的复数等同于我们在数学中学习到的复数,由实部和虚部构成。且由j或J构成虚部。
我们来表示一个复数,66.6+8.88j,那么66.6表示的是实部,8.88则是虚部。
组合数据类型
字符串 Str
字符串,顾名思义就是字符堆积成的串序列,例如‘dotcpp’、‘hello world!’、‘Python~’等都属于字符串,我们在使用字符串的时候通常用使用单引号'dotcpp'和双引号''dotcpp''以及三引号''' dotcpp'''三种形式。
但需要注意的是单引号和双引号是在一行中输入,而三引号是可以跨行的。
Unicode是一个编码方案,Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。Unicode 编码共有三种具体实现,分别为utf-8,utf-16,utf-32,其中utf-8占用一到四个字节,utf-16占用二或四个字节,utf-32占用四个字节。
访问字符串中的值,可以采用方括号切片和索引的方式来实现
str1 = 'Hello, World'
print(str1[0])
print(str1[1:5])
内建函数
字符串中的内建函数:
| 方法(参数) | 描述 | 返回值 |
|---|---|---|
string.capitalize() |
字符串第一个字符大写 | 返回一个首字母大写的字符串(str) |
string.count(str, start, end) |
统计字符串里某个字符出现的次数 | 返回子字符串在字符串中出现的次数(int) |
string.endswith(str, start,end) |
判断字符串是否以指定后缀结尾 | 如果以指定后缀结尾返回True,否则返回False(bool) |
string.find(str,start,end) |
检测 str 是否包含在 string 中 | 如果找到结果返回开始的索引值,否则返回-1(int) |
string.index(str,start,end) |
检测 str 是否包含在 string 中 | 如果找到结果返回开始的索引值,否则返回异常 |
string.join(str) |
以 string 作为分隔符,将 str 中所有的元素(的字符串表示)合并为一个新的字符串 | 返回通过指定字符连接序列中元素后生成的新字符串(str) |
string.replace(old_str,new_str, times) |
把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次 | 返回替换后的新字符串(str) |
string.split(str,times) |
通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串(默认分隔符为所有空字符) | 返回分割后的字符串列表(list) |
string.strip(str) |
移除字符串头尾指定的字符(默认为空格或换行符)或字符序列 | 返回移除字符串头尾指定的字符生成的新字符串(str) |
string.translate(table,str) |
根据参数table给出的表(包含 256 个字符)转换字符串的字符, 要过滤掉的字符放到 str参数中,table通过maketrans方法 |
返回翻译后的字符串 |
string.partition(str) |
根据指定的分隔符将字符串进行分割 | 返回一个3元的元组,第一个为分隔符左边的子串,第二个为分隔符本身,第三个为分隔符右边的子串(tuple) |
列表 List
列表(List),是一个存储不同类型数据类型的容器
python中,列表的作用相当于C语言中的数组,
列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。
列表的创建方法有两种
# 直接创建
lst = ['hello', 'world', 98]
# 内置函数创建
lst2 = list(['hello', 'world', 98])
从以上的简介中,可以总结概括出列表的几个特点包括:
- 列表元素按顺序特点有序排列
- 列表索引唯一映射,数据通过索引获取
- 列表可以重复存储
- 数据类型混存(区分于数组概念)
- 动态分配内存和回收内存
此外,还应该熟记的是列表的几种基本操作:
- 列表元素的增删改查:
# 创建列表
ls = []
lst = [10, 20, 30]
lst2 = [1, 11, 111]
# 列表元素的增加
lst.append(40) # 列表末尾添加一个元素
lst.extend(lst2) # 列表末尾添加多个元素
lst.insert(1,90) # 列表中插入一个元素
lst[1:] = lst2 # 列表切片添加
# 列表元素的删除
lst.remove(20) # 列表中删除第一个元素,不存在抛出ValueError
lst.pop(1) # 列表中删除索引元素,不存在抛出ValueError,空则为出栈
new_lst = lst2[1:] # 列表切片删除
lst.clear() # 清空列表
del lst # 释放列表内存
# 列表元素的修改
lst2[1] = 100 # 直接替换
lst2[1:2] = [2, 22] # 切片替换
# 列表元素的查询
lst = ['hello','world', 98, 99, 100]
# 第一种通过index()
print(index(lst[0]))
print(lst.index('hello')) # 返回元素索引值
# 第二中通过切片的方法,可获得多个元素
print(lst[0:4:2]) # [begin : end : step]
- 列表元素的遍历排序:
lst = ['hello','world', 98, 99, 100]
lst2 = [11, 23, 532, 325, 2, 12, 234]
# 遍历
for i in lst:
print(i) # 从lst列中遍历出所有元素
# 排序
lst2.sort() # lst升序排序,修改本身,reverse=True降序
lst3 = sorted(lst) #lst升序排序,创建新对象,reverse=True降序
最后回到列表的创建,常用的列表通过列表创建公示进行快速创建规则的列表:
lst = [i*i for i in range(1,10)]
"""
其中,
i*i表示列表元素的表达式
i表示自定义的变量名
rang(1,10)表示迭代的对象
"""
内建函数
列表中的内建函数:
| 方法(参数) | 描述 | 返回值 |
|---|---|---|
list.append(obj) |
在列表末尾添加新的对象 | 无返回值,但是会修改原来的列表 |
list.count(obj) |
统计某个元素在列表中出现的次数 | 返回元素在列表中出现的次数(int) |
list.extend(seq) |
在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) | 无返回值,但是会修改原来的列表 |
list.index(obj, start, end) |
用于从列表中找出某个值第一个匹配项的索引位置 | 返回查找对象的索引位置,如果没有找到对象则抛出异常 |
list.insert(index, obj) |
将指定对象插入列表的指定位置 | 无返回值,但是会修改原来的列表 |
list.pop([index=-1]) |
用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 | 返回从列表中移除的元素对象(obj) |
list.remove(obj) |
用于移除列表中某个值的第一个匹配项 | 无返回值,但是会修改原来的列表 |
list.reverse() |
反向列表中元素 | 无返回值,但是会修改原来的列表 |
list.sort(cmp=None, key=None, reverse=False) |
对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数(从小到大排序) | 无返回值,但是会修改原来的列表 |
元组 Tuple
Python的元组与列表类似,不同之处在于元组的元素不能修改。
元组使用小括号,列表使用方括号。
元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。
tup1 = () # 创建空元组
tup2 = (1, 2, 3, 4, 5, 6, 7 )
# 访问元组
tup2[1:5]
# 删除元组
del tup2
字典 Dict
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示:
d = {key1:value1, key2:value2}
值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。
不过一般只会用字符串或数字来做键值而不会用元组
内建函数
| 方法(参数) | 描述 | 返回值 |
|---|---|---|
dict.clear() |
用于删除字典内所有元素 | 无返回值,但是会修改原来的字典 |
dict.copy() |
对字典浅复制 | 返回一个字典的浅复制(dict) |
dict.get(key,default=None) |
查找键值,返回指定的建值 | 返回指定键的值,如果键不在字典中返回默认值 None 或者设置的默认值 |
dict.items() |
以列表返回可遍历的(键, 值) 元组数组 | 返回可遍历的(键, 值) 元组数组(tuple) |
dict.keys() |
得到字典中所有的键 | 返回一个字典所有的键(dict_keys) |
dict.values() |
得到字典中的所有键值 | 返回字典中的所有值(dict_values) |
dict.update(dict2) |
把字典dict2的键/值对更新到dict里 | 无返回值,但是会修改原来的字典 |
dict.pop(key) |
删除字典给定键 key 及对应的值 | 返回值为被删除的值(obj) |
Reference:

浙公网安备 33010602011771号