您需要在Python中学习的数据结构

Python已经在全球范围内被用于不同的领域,如制作网站、人工智能和更多领域。但要使所有这些成为可能,数据扮演着非常重要的角色,这意味着这些数据应该被有效地存储,并且必须及时访问。那么你是如何做到这一点的呢?我们使用一种叫做数据结构的东西。话虽如此,让我们来了解一下我们将在Python中介绍的数据结构主题。
在这里插入图片描述

什么是数据结构?

组织、管理和存储数据很重要,因为它使访问更容易,修改更有效。数据结构允许您以这样一种方式组织数据,使您能够存储数据集合、关联它们并相应地对它们执行操作。

Python中的数据结构类型

Python隐含地支持数据结构,使您能够存储和访问数据。这些结构称为列表、字典、元组和集合。
Python允许用户创建他们自己的数据结构,使他们能够完全控制自己的功能。最突出的数据结构有Stack、Queue、Tree、Linked List等等,您也可以在其他编程语言中使用它们。既然您已经了解了可用的类型,为什么我们不前进到数据结构并使用Python实现它们呢?
在这里插入图片描述

内置数据结构

顾名思义,这些数据结构内置在Python中,这使得编程变得更容易,并帮助程序员更快地使用它们来获得解决方案。让我们逐一详细讨论一下。

列表

列表用于以顺序方式存储不同数据类型的数据。列表中的每个元素都分配了地址,称为索引。索引值从0开始,一直持续到最后一个称为正索引的元素。
还有负索引,它从-1开始,使您可以从最后一个到第一个访问元素。现在让我们借助一个示例程序更好地理解列表。

创建列表

要创建列表,请使用方括号并相应地向其中添加元素。如果您没有在方括号内传递任何元素,您将得到一个空列表作为输出。

my_list = [] #create empty list
print(my_list)
my_list = [1, 2, 3, 'example', 3.132] #creating list with data
print(my_list)
添加元素

可以使用Append()、Extended()和Insert()函数在列表中添加元素。

  • append()函数将传递给它的所有元素作为单个元素添加。

  • EXTEND()函数将元素逐个添加到列表中。

  • INSERT()函数将传递给索引值的元素相加,并增加列表的大小。

my_list = [1, 2, 3]
print(my_list)
my_list.append([555, 12]) #add as a single element
print(my_list)
my_list.extend([234, 'more_example']) #add as different elements
print(my_list)
my_list.insert(1, 'insert_example') #add element i
print(my_list)
删除元素
  • 要删除元素,请使用Python中内置的_del_关键字,但这不会向我们返回任何内容。

  • 如果您想要回元素,可以使用POP()函数,该函数接受索引值。

  • 要按元素的值删除元素,请使用Remove()函数。

my_list = [1, 2, 3, 'example', 3.132, 10, 30]
del my_list[5] #delete element at index 5
print(my_list)
my_list.remove('example') #remove element with value
print(my_list)
a = my_list.pop(1) #pop element from list
print('Popped Element: ', a, ' List remaining: ', my_list)
my_list.clear() #empty the list
print(my_list)
访问元素

访问元素与访问Python中的字符串相同。您传递索引值,因此可以根据需要获取值。

my_list = [1, 2, 3, 'example', 3.132, 10, 30]
for element in my_list: #access elements one by one
print(element)
print(my_list) #access all elements
print(my_list[3]) #access index 3 element
print(my_list[0:2]) #access elements from 0 to 1 and exclude 2
print(my_list[::-1]) #access elements in reverse
其他功能

在处理列表时,您还可以使用其他几个函数。

  • len()函数向我们返回列表的长度。

  • index()函数查找第一次遇到时传递的值的索引值。

  • count()函数查找传递给它的值的计数。

  • sorted()和sort()函数执行相同的操作,即对列表的值进行排序。排序后的()具有返回类型,而排序()修改原始列表。

my_list = [1, 2, 3, 10, 30, 10]
print(len(my_list)) #find length of list
print(my_list.index(10)) #find index of element that occurs first
print(my_list.count(10)) #find count of the element
print(sorted(my_list)) #print sorted list but not change original
my_list.sort(reverse=True) #sort original list
print(my_list)
输出:
6
3
2
[1, 2, 3, 10, 10, 30]
[30, 10, 10, 3, 2, 1]

字典

字典用于存储键-值对。为了更好地理解,想一想一个电话局,那里添加了成百上千个名字和相应的号码。现在这里的常量值是姓名和电话号码,它们被称为键。各种名字和电话号码就是输入到钥匙上的值。如果您访问密钥的值,您将获得所有的姓名和电话号码。这就是键-值对的含义。
在Python中,此结构使用字典存储。让我们通过一个示例程序更好地理解这一点。

创建字典

可以使用花括号或使用dict()函数创建字典。无论何时使用字典,都需要添加键-值对。

my_dict = {} #empty dictionary
print(my_dict)
my_dict = {1: 'Python', 2: 'Java'} #dictionary with elements
print(my_dict)

输出:

{} {1:‘Python’,2:‘Java’}
更改和添加键、值对

要更改字典的值,需要使用键。
因此,您首先访问键,然后相应地更改值。要添加值,只需添加另一个键-值对,如下所示。

my_dict = {'First': 'Python', 'Second': 'Java'}
print(my_dict)
my_dict['Second'] = 'C++' #changing element
print(my_dict)
my_dict['Third'] = 'Ruby' #adding key-value pair
print(my_dict)

输出:

{‘First’:‘Python’,‘Second’:‘Java’}{‘First’:‘Python’,‘Second’:‘C++’}{‘First’:‘Python’,‘Second’:‘C++’,‘Third’:‘Ruby’}
删除键、值对
  • 要删除值,请使用POP()函数,该函数返回已删除的值。
  • 要检索键-值对,请使用popitem()函数,该函数返回键和值的元组。
  • 要清除整个字典,请使用Clear()函数。
my_dict = {'First': 'Python', 'Second': 'Java', 'Third': 'Ruby'}
a = my_dict.pop('Third') #pop element
print('Value:', a)
print('Dictionary:', my_dict)
b = my_dict.popitem() #pop the key-value pair
print('Key, value pair:', b)
print('Dictionary', my_dict)
my_dict.clear() #empty dictionary
print('n', my_dict)

输出:

值:RubyDictionary:{‘First’:‘Python’,‘Second’:‘Java’}
键值对:(‘Second’,‘Java’)
字典{‘First’:‘Python’}{}
访问元素

只能使用键访问元素。您可以使用get()函数,也可以只传递键值,这样就可以检索值。

my_dict = {'First': 'Python', 'Second': 'Java'}
print(my_dict['First']) #access elements using keys
print(my_dict.get('Second'))

输出:

Python
Java
其他功能

您有不同的函数,它们相应地将键-值对的键或值返回给我们,而键()、值()、项()函数则相应地返回给我们。

my_dict = {'First': 'Python', 'Second': 'Java', 'Third': 'Ruby'}
print(my_dict.keys()) #get keys
print(my_dict.values()) #get values
print(my_dict.items()) #get key-value pairs
print(my_dict.get('First'))

输出:

DICT_KEYS([‘First’,‘Second’,‘Third’])
DICT_VALUES([‘Python’,‘Java’,‘Ruby’])
DICT_ITEMS([(‘First’,‘Python’),(‘Second’,‘Java’),(‘Third’,‘Ruby’)])

Python

元组

元组与列表相同,不同之处在于数据一旦进入元组,无论如何都不能更改。唯一的例外是,当元组中的数据是可变的时,只有在那时元组数据才可以更改。示例程序将帮助您更好地理解。

创建元组

您可以使用括号或使用tuple()函数创建元组。

my_tuple = (1, 2, 3) #create tuple
print(my_tuple)

输出:

(1,2,3)
访问元素

访问元素与访问列表中的值相同。

my_tuple2 = (1, 2, 3, 'python') #access elements
for x in my_tuple2:
print(x)
print(my_tuple2)
print(my_tuple2[0])
print(my_tuple2[:])
print(my_tuple2[3][4])

输出:

123  
python(1,2,3,‘python’)
1
(1,2,3,‘python’) 
p
追加元素

要附加值,您可以使用‘+’运算符,该运算符将接受另一个要附加到它的元组。

my_tuple = (1, 2, 3)
my_tuple = my_tuple + (4, 5, 6) #add elements
print(my_tuple)

输出:

(1,2,3,4,5,6)
其他功能

这些函数与用于列表的函数相同。

my_tuple = (1, 2, 3, ['hindi', 'python'])
my_tuple[3][0] = 'english'
print(my_tuple)
print(my_tuple.count(2))
print(my_tuple.index(['english', 'python']))

输出:

(1,2,3,[‘English’,‘python’])
1
3

集合

集合是唯一的无序元素的集合。这意味着即使数据重复多次,也只会输入到集合中一次。它和你在算术中学过的集合很相似。运算也与算术集相同。示例程序将帮助您更好地理解。

创建集合

集是使用花括号创建的,但是您只需将值传递给它,而不是添加键值对。

my_set = {1, 2, 3, 4, 5, 5, 5} #create set
print(my_set)

输出:

{1,2,3,4,5}
添加元素

要添加元素,请使用add()函数并将值传递给它。

my_set = {1, 2, 3}
my_set.add(4) #add element to set
print(my_set)

输出:

{1,2,3,4}
集合操作

集合上的不同运算,如并集、交集等如下所示。

my_set = {1, 2, 3, 4}
my_set_2 = {3, 4, 5, 6}
print(my_set.union(my_set_2), '----------', my_set | my_set_2)
print(my_set.intersection(my_set_2), '----------', my_set & my_set_2)
print(my_set.difference(my_set_2), '----------', my_set - my_set_2)
print(my_set.symmetric_difference(my_set_2), '----------', my_set ^ my_set_2)
my_set.clear()
print(my_set)
  • UNION()函数将两个集合中存在的数据组合在一起。

  • INTERSION()函数仅查找两个集合中存在的数据。

  • Difference()函数删除两者中存在的数据,并输出仅存在于传递的集合中的数据。

  • SYMMPLICAL_DISTIAL()函数的作用与Difference()函数相同,但输出保留在两个集合中的数据。
    输出:

    {1,2,3,4,5,6}-{1,2,3,4,4,5,6}{3,4}-{3,4}{1,2}{1,2,5,6}-{1,2,5,6}
    

    set()既然您已经了解了内置数据结构,我们就开始学习用户定义的数据结构。对于用户定义的数据结构,名称本身暗示用户定义数据结构的工作方式并定义其中的功能。这使用户可以完全控制数据需要如何保存、操作等。

自定义数据结构

数组与列表

数组和列表是相同的结构,只是有一点不同。列出异构数据元素存储,而数组只允许在其中存储同构数据元素。

堆栈

堆栈是基于后进先出(LIFO)原则的线性数据结构,其中最后输入的数据将首先被访问。它是使用数组结构构建的,具有推送(添加)元素、弹出(删除)元素和仅从堆栈中称为顶部的一点访问元素的操作。此顶部是指向堆栈当前位置的指针。堆栈主要用于递归编程、反转字、字编辑器中的撤消机制等应用程序中。
在这里插入图片描述

队列

队列也是基于先进先出(FIFO)原则的线性数据结构,其中首先输入的数据将首先被访问。它是使用数组结构构建的,并且具有可以从队列的两端执行的操作,即头-尾或前-后。诸如添加和删除元素的操作称为入队和出队,并且可以执行对元素的访问。队列用作流量拥塞管理的网络缓冲区,用于作业调度等操作系统。
在这里插入图片描述

树是具有根和节点的非线性数据结构。根是数据来源的节点,节点是我们可用的其他数据点。前面的节点是父节点,后面的节点称为子节点。一棵树必须有不同的层次来显示信息的深度。最后的节点称为叶子。树创建了一个层次结构,可以用于许多现实世界的应用程序中,比如超文本标记语言页面。使用树来区分哪个标签属于哪个挡路。它在搜索目的等方面也很有效。
在这里插入图片描述

链表

链表是一种线性数据结构,因此不会存储,但使用指针彼此链接。链表的节点由数据和称为NEXT的指针组成。这些结构最广泛地用于图像观看应用、音乐播放器应用等
在这里插入图片描述

图表

图用于存储称为顶点(节点)和边(边)的点的数据集合。图形堪称是现实世界地图最准确的表现形式。它们被用来找出被称为节点的各种数据点之间的各种成本距离,从而找到最少的路径。
许多应用程序,如谷歌地图、优步等,都使用图形来找到最短的距离,并以最好的方式增加利润。
在这里插入图片描述

HashMaps

HashMap与Python中的字典相同。它们可以用来实现诸如电话簿之类的应用程序,根据列表填充数据等等。
在这里插入图片描述
这就总结了Python中所有重要的数据结构。我希望您已经了解了Python中的内置和用户定义的数据结构,以及它们的重要性。

最全Python学习视频

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值