百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

第6天 | 12天搞定Python,数据结构(上)

off999 2024-10-01 13:53 27 浏览 0 评论

随着数据越来越丰富,几十万、几百万甚至上亿的数据就会出现,而对这么大堆数据进行搜索、插入或者排序等的操作就越来越慢,数据结构就是用来解决这些问题的。

简单来说,数据结构是指特定关系的数据元素的集合。在Python语言,常用的数据结构有列表、元组、集合和字典4种数据结构类型。

6.1 列表

列表(list)是Python内置的,可以保存任何数据类型,最常用的基本数据结构。它是可改变的序列,它的元素可进行增删改。

除了内置的函数进行操作外,还可以通过索引(从0开始)的方式进行。列表是有序的,可对其元素进行排序、比较等操作。

1. 列表声明

列表可通过中括号[]或list()进行声明。里面没有元素时,为空列表。列表元素可以同时存在不同的数据类型。

# 用[]声明一个空列表
ls = []
print(type(ls), ls)
# 用list()声明一个空列表
ls = list()
print(type(ls), ls)
# 支持不同数据类型
lst = ["历史", 100, 25.68]
print(lst)
# list内容
ls = list(["test", 15.21, 520])
print(ls)

输出结果

<class 'list'> []
<class 'list'> []
['历史', 100, 25.68]
['test', 15.21, 520]

2. 新增对象

通过append(obj)方法添加新的对象,insert(index, obj) 方法在指定位置将对象插入列表。

ls = ["I", "love", "Python"]
# 在指定位置插入一个对象
ls.insert(3, "and Java")
# 添加一个对象
ls.append(".")
print(ls)

输出结果

['I', 'love', 'Python', 'and Java', '.']

通过extend(seq)方法在列表末尾一次性追加另一个序列中的多个值。通过+号可将两个列表进行拼接。

# 将ls2附加到ls1后面
ls1 = [1, 2, 3]
ls2 = [4, 5, 6]
ls1.extend(ls2)
print(ls1)

输出结果

[1, 2, 3, 4, 5, 6]

通过+号可将两个列表进行拼接。

# 通过+号进行拼接
ls3 = [1, 3]
ls4 = [1, 4]
ls3 = ls3 + ls4
print(ls3)

输出结果

[1, 3, 1, 4]

3. 删除

通过pop(n) 删除指定下标对应的元素 。如指定的下标n不存在,会报下标越界错误。第1个元素下标为0,最后一个为-1。不指定下标值时,会默认删除最后一个元素。成功删除,会返回元素值。

# 删除第一个元素
ls = ["Android", "iOS", "Python", "C#"]
ls.pop(0)
print(ls)
# 删除最后一个元素
ls.pop()
print(ls)
v = ls.pop(-1)
print(v)

输出结果

['iOS', 'Python', 'C#']
['iOS', 'Python']
Python

remove(x) 删除x指定的一个元素,有多个相同的元素,删除第一个。如若指定的x值在列表里不存在,会报错。删除不会返回值。

# 删除指定内容
lang = ["Chinese", "English", "French", "German"]
lang.remove("German")
print(lang)

输出结果

['Chinese', 'English', 'French']

可通过del list[n] 删除指定下标对应的元素 , del list 删除整个列表, list删除后无法访问。另外可通过clear()清空内容。

# 删除指定元素
number = [5, 6, 7, 8]
del number[0]
print(number)
# 清空内容
number.clear()
print(number)
# 删除整个列表后,不可再访问
del number

输出结果

[6, 7, 8]
[]

4. 修改

可指定下标或区间范围,对元素进行修改。指定下标不存在时,会报越界错误。指定的区间范围长度超过的那个部分内容,会新增元素。

# 指定下标进行修改元素
number = [5, 6, 7, 8]
number[0] = 1
print(number)
# 指定区间,修改或新增元素
number[1:5] = [2, 3, 4, 5]
print(number)

输出结果

[1, 6, 7, 8]
[1, 2, 3, 4, 5]

5. 访问

用下标或区间范围可进行元素访问。指定的下标不存在时,会报越界错误。第1个元素下标为0,最后1个为-1。通过区间范围可截取子列表。

# 用下标访问元素
colors = ["Red", "Yellow", "Blue", "Orange"]
print(colors[0])
print(colors[-1])
# 用区间访问元素
color = colors[1:3]
print(color)

输出结果

Red
Orange
['Yellow', 'Blue']

可用in或not in关键字判断元素是否存在。

# 用in判断是否存在
lang = ["Chinese", "English", "French", "German"]
if "Japanese" in lang:
    lang.remove("Japanese")
print(lang)

输出结果

['Chinese', 'English', 'French', 'German']

用index(obj) 从列表中找出某个值的第一个匹配项的索引位置,如果找不到,会报错。count(obj) 统计某个元素在列表中出现的次数。max(list) 返回列表元素最大值,min(list) 返回列表元素最小值。

# 查找指定元素的第一个下标
number = [5, 5, 6, 7, 8]
i = number.index(8)
print(i)
# 统计元素出现的次数
n = number.count(5)
print(n)
# 获取最大值
max_v = max(number)
print(max_v)
# 获取最小值
min_v = min(number)
print(min_v)

输出结果

4
2
8
5

6. 遍历

在遍历列表时,经常会用到列表长度,可用len(list) 计算列表元素个数(即列表长度)。如果只是遍历元素的内容,可直接用for循环,如果通过下标的方式访问元素,则可通过rang()函数,如果同时需要下标和元素值,可使用enumerate()函数。

# 直接遍历元素
number = [1, 3, 1, 4]
for n in number:
    print(n)

# 通过下标访问元素
length = len(number)
for i in range(length):
    print(number[i])

# 同时获取下标和元素
for i, n in enumerate(number):
    print(i, n)

输出结果

1
3
1
4
1
3
1
4
0 1
1 3
2 1
3 4

7. 排序

可用reverse() 方法,反向列表中的元素。可用sort() 对原列表进行升序(从小到大)排列,如要使用降序(从大到小)则使用sort(reverse=True)方法,还有用sorted()函数,可以获取排序后的列表内容。排序要求列表内容是针对同一类型的。

# 对列表进行倒序
number = [1, 5, 2, 3, 4]
number.reverse()
print(number)
# 列表升序
number.sort()
print(number)
# 列表降序
number.sort(reverse=True)
print(number)
# 列表升序排列后的结果
new = sorted(number)
print(new)
# 列表降序排列后的结果
new = sorted(number, reverse=True)
print(new)

输出结果

[4, 3, 2, 5, 1]
[1, 2, 3, 4, 5]
[5, 4, 3, 2, 1]
[1, 2, 3, 4, 5]
[5, 4, 3, 2, 1]

8. 转换

可通过list()方法将字符串、元组、集合转成列表。

# 字符串转为列表
s = "string"
ls1 = list(s)
print(ls1)
# 元组转为列表
t = ("a", "b", "c")
ls2 = list(t)
print(ls2)
# 集合转为列表
set1 = {1, 3, 4}
ls3 = list(set1)
print(ls3)

输出结果

['s', 't', 'r', 'i', 'n', 'g']
['a', 'b', 'c']
[1, 3, 4]

如果列表内容全是字符串,可直接通过join()方法将列表转成字符串。如果内容有其他数据类型,通过join(map(str, list))的方式转换。

# 列表(全字符串内容)转为字符串
ls = ["O", "K", "!"]
print("".join(ls))
# 有整型内容
ls = [10, "K"]
print("".join(map(str, ls)))

输出结果

OK!
10K

奥力给,列表到这就结束了,如果你觉得程序哪里不对,请一定要告诉我,反正我也不会改,你别憋出病来。有些没学会的朋友,可能会说:"老陈,你教的都是没用的东西"。那我只能回答你:“我不允许你这么说你自己”。不信的话,你接着看有关元组的内容。

6.2 元组

元组与列表相似,不同之处在于它的元素是不可改变的,不可进行增删改的,也就是说元组一旦创建,便不可以编辑(增删改)其中的元素。虽然元素不允许删除,但可以使用del语句来删除整个元组。

1. 元组声明

元组可通过小括号()或tuple()进行声明。里面没有元素时,为空元组。元组元素可以同时存在不同的数据类型。用()声明元组时,如果只有一个元素,后面要加逗号, 否则会被当作运算符处理。

# 用()声明一个空元组
t = ()
print(type(t), t)
# 用tuple()声明一个空元组
t = tuple()
print(type(t), t)
# 支持不同数据类型
t = ("化学", 100, 25.68)
print(t)
# 只有一个元素,记得加,
t = ("中文",)
print(t)

输出结果

<class 'tuple'> ()
<class 'tuple'> ()
('化学', 100, 25.68)
('中文',)

2. 新增

元组中的元素值是不允许修改的,但我们可以通过+号对元组进行连接组合。

# 两个元组拼接
t1 = (1, 2, 3)
t2 = (4, 5, 6)
t1 += t2
print(t1)

输出结果

(1, 2, 3, 4, 5, 6)

3. 删除

不可以对元组中的元素值进行删除,但可替换整个元组内容,还可以用del tuple 删除整个元组,删除后不可再访问。

# 元组替换内容
n1 = (5, 6, 7, 8)
n2 = (1, 2, 3)
print(n1)
n1 = n2
print(n1)
# 删除整个元组后,不可再访问
del n1

输出结果

(5, 6, 7, 8)
(1, 2, 3)

4. 访问

用下标或区间范围可进行元素访问。指定的下标不存在时,会报越界错误。第1个元素下标为0,最后1个为-1。通过区间范围可截取子元组。

# 用下标访问元素
colors = ("Red", "Yellow", "Blue", "Orange")
print(colors[0])
print(colors[-1])
# 用区间访问元素
color = colors[1:3]
print(color)

输出结果

Red
Orange
('Yellow', 'Blue')

可用in关键字判断元素是否存在,可用not in判断元素是否不存在。

# 用in 用in判断是否存在
lang = ("Chinese", "English", "French", "German")
if "Japanese" in lang:
    print("存在")
else:
    print("不存在")

输出结果

不存在

用index(obj) 从元组中找出某个值的第一个匹配项的索引位置,如果找不到,会报错。count(obj) 统计某个元素在元组中出现的次数。max(tuple) 返回元组元素最大值,min(tuple) 返回元组元素最小值。

# 查找指定元素的第一个下标
number = (6, 6, 7, 8)
i = number.index(6)
print(i)
# 统计元素出现的次数
n = number.count(8)
print(n)
# 获取元素最大值
max_v = max(number)
print(max_v)
# 获取元素最小值
min_v = min(number)
print(min_v)

输出结果

0
1
8
6

5. 遍历

在遍历元组时,经常会用到元组长度,可用len(tuple) 计算元组元素个数(即元组长度)。如果只是遍历元素的内容,可直接用for循环,如果通过下标的方式访问元素,则可通过rang()函数,如果同时需要下标和元素值,可使用enumerate()函数。

# 直接遍历元素
number = (1, 3, 1, 4)
for n in number:
    print(n)

# 通过下标访问元素
length = len(number)
for i in range(length):
    print(number[i])

# 同时获取下标和元素
for i, n in enumerate(number):
    print(i, n)

输出结果

1
3
1
4
1
3
1
4
0 1
1 3
2 1
3 4

6. 排序

可用sorted()函数,对元组内容进行排序,可获取排序后的元组内容。排序要求元组内容是针对同一类型的。

# 元组升序排列
number = (1, 5, 2, 3, 4)
new = sorted(number)
print(new)
# 元组降序排列
new = sorted(number, reverse=True)
print(new)

输出结果

[1, 2, 3, 4, 5]
[5, 4, 3, 2, 1]

7. 转换

可通过tuple()方法将字符串、列表、集合转成元组。

# 字符串转为元组
s = "string"
t1 = tuple(s)
print(t1)
# 列表转为元组
lst = ["a", "b", "c"]
t2 = tuple(lst)
print(t2)
# 集合转为元组
set1 = {1, 3, 4}
t3 = tuple(set1)
print(t3)

输出结果

('s', 't', 'r', 'i', 'n', 'g')
('a', 'b', 'c')
(1, 3, 4)

如果元组内容全是字符串,可直接通过join()方法将元组转成字符串,如果内容有其他数据类型,通过join(map(str, tuple))的方式转换。

# 元组(全字符串内容)转为字符串
t = ("O", "K", "!")
print("".join(t))
# 数字内容
t = (10, 8.6)
print("".join(map(str, t)))

输出结果

OK!
108.6

奥力给,元组到这就说完了,喜欢的朋友,赶紧转发出去,不喜欢的朋友,立即分享出去。老陈就告诉你,没背景的我是什么背景。

一个当了10年技术总监的老家伙,分享多年的编程经验。想学编程的朋友,可关注今日头条:老陈说编程。我将分享Python,前端(小程序)和App方面的编程知识。关注我,没错的。

#Python##Python编程从入门到实践##程序员#

相关推荐

Python钩子函数实现事件驱动系统(created钩子函数)

钩子函数(HookFunction)是现代软件开发中一个重要的设计模式,它允许开发者在特定事件发生时自动执行预定义的代码。在Python生态系统中,钩子函数广泛应用于框架开发、插件系统、事件处理和中...

Python函数(python函数题库及答案)

定义和基本内容def函数名(传入参数):函数体return返回值注意:参数、返回值如果不需要,可以省略。函数必须先定义后使用。参数之间使用逗号进行分割,传入的时候,按照顺序传入...

Python技能:Pathlib面向对象操作路径,比os.path更现代!

在Python编程中,文件和目录的操作是日常中不可或缺的一部分。虽然,这么久以来,钢铁老豆也还是习惯性地使用os、shutil模块的函数式API,这两个模块虽然功能强大,但在某些情况下还是显得笨重,不...

使用Python实现智能物流系统优化与路径规划

阅读文章前辛苦您点下“关注”,方便讨论和分享,为了回馈您的支持,我将每日更新优质内容。在现代物流系统中,优化运输路径和提高配送效率是至关重要的。本文将介绍如何使用Python实现智能物流系统的优化与路...

Python if 语句的系统化学习路径(python里的if语句案例)

以下是针对Pythonif语句的系统化学习路径,从零基础到灵活应用分为4个阶段,包含具体练习项目和避坑指南:一、基础认知阶段(1-2天)目标:理解条件判断的逻辑本质核心语法结构if条件:...

[Python] FastAPI基础:Path路径参数用法解析与实例

查询query参数(上一篇)路径path参数(本篇)请求体body参数(下一篇)请求头header参数本篇项目目录结构:1.路径参数路径参数是URL地址的一部分,是必填的。路径参...

Python小案例55- os模块执行文件路径

在Python中,我们可以使用os模块来执行文件路径操作。os模块提供了许多函数,用于处理文件和目录路径。获取当前工作目录(CurrentWorkingDirectory,CWD):使用os....

python:os.path - 常用路径操作模块

应该是所有程序都需要用到的路径操作,不废话,直接开始以下是常用总结,当你想做路径相关时,首先应该想到的是这个模块,并知道这个模块有哪些主要功能,获取、分割、拼接、判断、获取文件属性。1、路径获取2、路...

原来如此:Python居然有6种模块路径搜索方式

点赞、收藏、加关注,下次找我不迷路当我们使用import语句导入模块时,Python是怎么找到这些模块的呢?今天我就带大家深入了解Python的6种模块路径搜索方式。一、Python模块...

每天10分钟,python进阶(25)(python进阶视频)

首先明确学习目标,今天的目标是继续python中实例开发项目--飞机大战今天任务进行面向对象版的飞机大战开发--游戏代码整编目标:完善整串代码,提供完整游戏代码历时25天,首先要看成品,坚持才有收获i...

python 打地鼠小游戏(打地鼠python程序设计说明)

给大家分享一段AI自动生成的代码(在这个游戏中,玩家需要在有限时间内打中尽可能多的出现在地图上的地鼠),由于我现在用的这个电脑没有安装sublime或pycharm等工具,所以还没有测试,有兴趣的朋友...

python线程之十:线程 threading 最终总结

小伙伴们,到今天threading模块彻底讲完。现在全面总结threading模块1、threading模块有自己的方法详细点击【threading模块的方法】threading模块:较低级...

Python信号处理实战:使用signal模块响应系统事件

信号是操作系统用来通知进程发生了某个事件的一种异步通信方式。在Python中,标准库的signal模块提供了处理这些系统信号的机制。信号通常由外部事件触发,例如用户按下Ctrl+C、子进程终止或系统资...

Python多线程:让程序 “多线作战” 的秘密武器

一、什么是多线程?在日常生活中,我们可以一边听音乐一边浏览新闻,这就是“多任务处理”。在Python编程里,多线程同样允许程序同时执行多个任务,从而提升程序的执行效率和响应速度。不过,Python...

用python写游戏之200行代码写个数字华容道

今天来分析一个益智游戏,数字华容道。当初对这个游戏颇有印象还是在最强大脑节目上面,何猷君以几十秒就完成了这个游戏。前几天写2048的时候,又想起了这个游戏,想着来研究一下。游戏玩法用尽量少的步数,尽量...

取消回复欢迎 发表评论: