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])

从以上的简介中,可以总结概括出列表的几个特点包括:

  • 列表元素按顺序特点有序排列
  • 列表索引唯一映射,数据通过索引获取
  • 列表可以重复存储
  • 数据类型混存(区分于数组概念)
  • 动态分配内存和回收内存

此外,还应该熟记的是列表的几种基本操作:

  1. 列表元素的增删改查:
# 创建列表
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]

  1. 列表元素的遍历排序:
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:

菜鸟手册

posted @ 2021-03-28 21:43  Schuetzen  阅读(138)  评论(0)    收藏  举报