IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 学会了Python,感觉自己膨胀了许多——ch3 基本数据结构(未更新完毕) -> 正文阅读

[数据结构与算法]学会了Python,感觉自己膨胀了许多——ch3 基本数据结构(未更新完毕)

个人笔记,同时也记录着本人的学习轨迹~ 附有目录便于查阅碎片知识
如果什么不足之处也欢迎大家来指正
更多系列欢迎大家戳主页去阅读~

完整Python学习戳这里~~~
完整Python学习戳这里~~~
完整Python学习戳这里~~~


三、基本数据结构

在程序设计中,我们总会将数据对象用一些容器装起来,这种数据对象本身的组织方式就是数据结构。

1.列表list

列表就像是一个篮子,这个篮子里面可以放各种各样的东西,用中括号[]表示

(1)列表的创建、访问

'''基本格式:
变量 = [变量1,变量2,变量3,.....]
里面的变量可以是任何数据类型的个体元素,也可以是一个列表/元组等数据结构
列表的元素可以直接通过下角标来访问
'''# 实例如下:
a = [1,2.0,'嘿嘿!']
print(a) # 结果为[1, 2.0, '嘿嘿!']
print(a[2]) # 结果为嘿嘿!
print(a[-1]) # 负数依旧是从最后开始逆序访问(结果为嘿嘿!)

由于列表里的元素可以是数据结构,因此我们可以在某列表里面进行嵌套形成多维列表(访问方式依旧是通过下角标)

fruit = ['香蕉','菠萝','哈密瓜','橙子']
food = ['米饭','面条',fruit,'包子']
print(food[2]) # 输出整个列表 ['香蕉', '菠萝', '哈密瓜', '橙子']
print(food[2][1]) # 输出fruit列表的第2个元素 菠萝

列表也可以进行切片访问

a = [1,2,3,4,5,8,9,10]
list1 = a[:5] # [1, 2, 3, 4, 5] 从a[0]到a[5-1]形成的列表
list2 = a[2:] # [3, 4, 5, 8, 9, 10] 从a[2]到末尾形成的列表
list3 = a[2:5] # [3, 4, 5] 从a[2]到a[5-1]形成的列表
list4 = a[2:7:3] # [3, 8] 从a[2]到a[7-1]每加3取一个数组成列表(a[2] a[5])

(2)range函数创建列表

range函数的语法有三种,分别是1个、2个、3个参数

a1 = range(5) # a1=[0,1,2,3,4]
a2 = range(1,5) # a2=[1,2,3,4]
a3 = range(1,20,4) # a3=[1,5,9,13,17]
'''三个参数一定要是整数!!如果range范围内没有元素就是生成空列表'''

我们在前面for循环了解过range,所以range函数的本质是生成一个列表,for循环in range依旧是在生成的这个列表里循环。

Python3中严格说直接用range生成的变量并不是真正的列表,我们仍需进行一下类型转换才能生成真正的列表。(实例如下)

a = range(1,10,2)
print(a,type(a)) # 输出 range(1, 10, 2) <class 'range'>
print(a[1]) # 输出 3
b = list(a) # 进行一个格式的强制转换
print(b,type(b)) # [1, 3, 5, 7, 9] <class 'list'>

range类型的假列表我们依旧可以通过下角标来访问元素值,只是在输出整个列表时它的可读性比较差(比较上面的a和b)。

(3)列表的高级操作

学过C++的人会知道C++里有STL标准库里面存储了与C有关许多的数据结构还有相关的函数操作,在Python数据结构中,我们对应的数据结构也会有一些高级操作,是通过函数来实现的。
1.运算符运算
乘法加法等于不等于是列表常用的运算符

a = [1,2,3,4,5,8,9,10]
b = ['香蕉','菠萝','哈密瓜']
list1 = a*4 # 乘法代表列表a重复4遍 [1, 2, 8, 9, 10, 1, 2, 8, 9, 10, 1, 2, 8, 9, 10, 1, 2, 8, 9, 10]
list2 = a+b # 加法代表列表拼接 [1, 2, 8, 9, 10, '香蕉', '菠萝', '哈密瓜']
bool1 = a==b # 如果两个列表相等,返回True;否则返回False
bool2 = a!=b # 如果两个列表不等,返回True;否则返回False

2.查询列表某些属性
列表长度取某元素的下标某元素出现次数是列表常用的属性,如果列表里面全部是浮点数和整型数,还可以研究最大值最小值

a = [1,2,8,11.2,9,10,2]
b = ['香蕉','菠萝','哈密瓜']
num1 = len(a) # 返回值为a的长度 7
num2 = a.index(2) # 返回值为元素2出现的第一个下标 1
num3 = a.count(2) # 返回值为元素2出现的次数 2
Max = max(a) # 返回最大值 11.2
Min = min(a) # 返回最小值 1

3.改变列表自身的操作
(1)列表元素添加
append——将某元素传到列表最后
extend——将某容器里所有的元素传到列表最后
(这个容器可以是列表、range、元组、字典等任意有元素的数据结构)
insert——将某元素添加到列表的某一处位置(传入一个角标的参数)

a = [1,2,3,4,5,6]
x = [8,9]
d = b = c = a # 拷贝一下列表a
a.append(99) # 添加99这一个元素
print(a)
b.append(x) # 把x这个列表当成一个元素添加到尾部
print(b)
c.extend(x) # 把x里面所有的元素按序添加到尾部
print(c)
d.insert(1,'我是单词')
print(d)

运行结果:
[1, 2, 3, 4, 5, 6, 99]
[1, 2, 3, 4, 5, 6, 99, [8, 9]]
[1, 2, 3, 4, 5, 6, 99, [8, 9], 8, 9]
[1, ‘我是单词’, 2, 3, 4, 5, 6, 99, [8, 9], 8, 9]
仔细看看,有什么疑问?
提示:b c和d各只调用了一次函数

程序第三行有一个拷贝的操作,因为这时候实际上abcd四个列表是同时改变数值的(比如在b里面添加了[8,9]这个元素,在a和c里同样也添加了)
这个是列表的拷贝操作类似于C语言的指针。
(2)列表元素删除
del()——删除变量最常用的方法
pop()——返回列表选定index的元素值并删除该元素
remove(某)——删除首次出现的某元素

a = [1,2,5,4,3,8,4]
del a[1] # 将a[1]这一个元素删除
del a # 将整个列表a删除
a = [1,2,5,4,3,8,4]
a.remove(4) # 将第一个元素4移出
print(a) # [1, 2, 5, 3, 8, 4]
print(a.pop(1),a,sep='与') 
# 返回a[1]的数值,并且将a[1]删除 2与[1, 5, 3, 8, 4]
print(a.pop()) # 不传入参量就是返回最后一个的数值,并且将最后一个元素删除

(3)排序和翻转
reverse——将整个列表翻转
sort——排序函数(无参数时为从小到大)

a = [5,5.4,3,1,22,4,6]
a.reverse() # 将a翻转,a变成[6, 4, 22, 1, 3, 5.4, 5]
a.sort() # 将a内元素从小到大排序 [1, 3, 4, 5, 5.4, 6, 22]

上面的sort函数是从小到大排序,我们可以传入一些控制的参数,让其变成从大到小排序——sort函数里面有一个参数为reverse默认值为False。

a = [5,5.4,3,1,22,4,6]
a.sort(reverse=True) # 告诉程序排序时进行翻转(这里是参数不是那个reverse函数)
print(a) # [22, 6, 5.4, 5, 4, 3, 1]
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-02 11:37:50  更:2021-09-02 11:39:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/30 0:54:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码