元组和列表的主要差别,Python元组和列表之间的差异

 admin   2024-01-03 18:07   28 人阅读  0 条评论

小伙伴想知道Python元组和列表之间的差异的话题,关于元组和列表的主要差别这类相关题,小编为你详细的解一下吧!


首先,让我们看看元组和列表是什么样的。


元组是什么样的?等号的左端是变量名,即元组的名称,等号的右端是元组。元组的特征是用括号括起来的多个值。价值和价值有什么区别?逗号,这是一个元组。现在我们可以说这个元组包含三个值。这三个值都是字符串,第一个值是“编程大师”,第二个值是“998”,第三个值是“Frank”。接下来就可以使用print进行打印了,先打印变量,然后将输出结果以元组的形式输出。然后在第二个输出中我们需要检查它的类型,该类型是一个元组。


前面说过,定义变量a=20就和在内存中创建一个空间一样,这个空间的名称是a,内容是20。


那么元组在内存中是什么样子的呢?元组相当于在内存中创建空间,但比单个变量大。在这个空间中,当前创建的元组总共存储了三个值,大家可以看到下面所示的0、1、2是位置,或者说是索引。那么这是否意味着我们可以使用方括号来索引值,因为位置已被指示?


这是一种思考题的方式,当你看到这种现象时,你不禁会想是否也会使用类似的方法。我们再看一下这份名单。列表和元组非常相似。有什么不同?不同的是,列表使用方括号,里面包含每条数据,用逗号分隔。我们使用的括号、方括号、逗号等都是英文的,所以请不要使用中文。如果使用中文的话会报错。


输出如下,列出了列表,它在内存中是如何出现的呢?它也是一个存储各种值的连续空间,并且它还有一个索引,因此您可以使用方括号来查找其中的每个值。与元组不同,它们可以增加、减少或修改,这就是为什么它们后面有省略号。元组是不可变的。这就是区别。


一、列表元组***字典的区别?

列表、元组、***和字典是Python中常用的数据结构,但它们在以下方面有明显的区别


1---变异性--:


---列表--列表可能会发生变化。这意味着您可以在创建后添加、删除或修改列表中的元素。


---tuple--元组是不可变的。元组一旦创建,其元素就无法修改。


---***--***是可变的,可以添加或删除元素,但***中的元素一定不能是可变的。


---字典--字典是可变的,允许您添加、删除或修改键值对。


2---顺序--:


---List--列表按元素添加的顺序排序。


---Tuple--元组也按照它们定义的顺序对其元素进行排序。


---set--***是无序的,其元素之间没有明确的顺序。


---字典--字典是无序的,但包含键值对,并且键是唯一的。


3---重复性--:


---List--列表可以包含重复的元素。


---元组--元组可以包含重复的元素。


---***--***不包含重复元素,自动去除重复元素。


---字典--字典的键必须是唯一的,但值可以重复。


4---索引--:


---List--可以通过索引访列表的元素。


---元组--元组是有序的,因此可以通过索引访它们的元素。


---Collection--不支持通过索引访,因为***未排序。


---字典--字典中的值可以通过键而不是索引来访。


5---表达式--:


---List--用方括号`[]`表示,如`[1,2,3]`。


---元组--用括号`-、`表示,如`-1,2,3'。


---***--用大括号``显示,如``。


---字典--包含键值对,如``,用大括号``表示。


总之,选择使用哪种数据结构取决于您的需求。如果您需要可变性和顺序,您可以选择列表或字典。如果您需要不变性和排序,您可以选择元组。如果需要去重、整理,可以选择***。不同的数据结构适合不同的情况。


二、python列表和元组的区别?

Python中的函数(内置函数和您编写的自定义函数)是数据处理的关键工具。然而,数据处理可能有点混乱,并且不知道发生了什么可能会导致分析中出现严重错误。


《Python函数控制列表和字典》深入研究了Python在函数内操作时如何处理不同的数据类型,并学习如何确保数据仅在需要更改时才更改。


函数的内存隔离


让我们做一些实验来了解Python如何处理函数内的全局变量。创建两个全局变量number_1和number_2并将它们分配给整数5和10。然后,我们使用这些全局变量作为执行一些简单数学运算的函数的参数。我们还使用变量名称作为函数的参数名称。然后我们检查函数内变量的任何使用是否影响该变量的全局值。


可以看到,上面的函数运行良好,即使将全局变量number_1和number_2作为参数并在函数的参数名称中使用它们,它们的值也不会改变。这是因为Python将函数中的变量存储在与全局变量不同的内存位置中。他们是孤立的。因此,变量number_1可以在全局范围内具有一个值-5,并在此处隔离的函数内具有不同的值-50。


列表和字典怎么样?


检查清单


我们确保在number_1函数中对上述变量执行的操作不会影响全局值。但number_1是一个整数,这是一个非常基本的数据类型。如果您尝试使用其他数据类型(例如下面列出的数据类型)执行相同的实验,会发生什么情况?创建一个名为duplicate_last-的函数。此函数适用于作为参数传递的任何列表。复制最后一项。


正如你所看到的,这里的全局值在initial_list中更新,即使它们只在函数内改变!


字典


现在我们来写一个函数,以字典为参数,保证函数内修改时全局字典变量也被修改。


为了使这一点更加真实,我们使用Python基础知识课程中使用的AppleStore-csv数据集的数据。数据可以在这里下载。


在下面的代码片段中,我们从一个字典开始,其中包含数据集中每个年龄段的应用程序数量。因此,有4,433个应用程序的评级为“4+”,987个应用程序的评级为“4+”。对于“9+”等。假设您想要计算每个年龄段的百分比,以确定哪个年龄段在AppStore中最常见。


为此,我们编写一个名为make_percentages的函数,它将字典作为参数并将计数转换为百分比。要获得评分总数,您需要从0开始计数,然后循环遍历字典中的每个值并将其添加到计数中。然后再次迭代字典并对每个值进行数学计算以计算百分比。


在查看输出之前,让我们快速回顾一下上面发生的情况。将应用程序的年龄分级字典分配给content_atings变量,然后创建一个名为make_percentages-的新函数。该函数采用一个名为a_dictionary的参数。


为了绘制属于每个年龄段的应用程序的百分比,我们需要知道应用程序的总数,因此我们首先传入每个键,将名为Total的新变量设置为0,然后迭代a_dictionary以获取总数。


完成后,只需再次循环a_dictionary,将每个条目除以总和,然后将结果乘以100。这将为您提供一本带有百分比的字典。


但是,如果我们使用globalcontent_lateds作为这个新函数的参数,会发生什么?


正如您在content_lateds列表中看到的,全局变量也发生了变化,尽管它仅在我们创建的函数make_percentages中进行了修改。


这里到底发生了什么,我们已经研究了可变数据类型和不可变数据类型之间的区别。


可变和不可变数据类型


在Python中,数据类型可以是可变-可变或不可变-不可变的。在Python中开始使用的大多数数据类型(包括整数、浮点数、字符串、布尔值和元组)都是不可变的,但列表和字典是不可变的。这意味着即使在函数中使用全局列表或字典也可以更改,如上面的示例所示。


要理解可变-可变和不可变-不可变之间的区别,了解Python实际如何处理这些变量会有所帮助。


让我们考虑一个简单的变量赋值。


变量名中的a就像指针5一样,可以帮助您在需要时检索它。


5是一个整数,整数是不可变的数据类型。当数据类型是不可变的时,这意味着一旦创建它就无法更新。执行a+=1实际上并不会将5更新为6。在下面的动画中您可以看到


1.a最初表示5。


2、执行a+=1,将指针从5移动到6,但数字5实际上没有改变。


可变数据类型(例如列表和字典)的行为有所不同。它可能会被更新。例如,让我们创建一个非常简单的列表


如果在这个列表的末尾添加3,list_1不仅会指向另一个列表,而且还会直接更新现有的列表。


即使你创建了多个列表变量,只要它们指向同一个列表,当列表发生变化时,它们都会被更新,如下面的代码


下面是上面代码中实际发生的动画的可视化。


这解释了为什么当我之前尝试使用列表和字典时全局变量发生了变化。列表和字典是可变的,因此更改它们(即使在函数内)也会更改列表或字典本身。对于不可变数据类型,情况并非如此。


保持可变数据类型不变


通常,我们不希望函数改变全局变量,即使它们包含可变数据类型(例如列表或字典)。这是因为更复杂的分析和程序通常具有不同的可用功能。当每个人都对他们正在处理的列表和词典进行更改时,很难跟踪更改。


值得庆幸的是,有一个简单的方法可以解决这个题。您可以使用内置的Python方法复制列表或字典。


如果您还不知道该怎么做,请不要担心。我们在中级Python课程中介绍了这一点,但您需要从本教程中了解-copy-的工作方式如下


让我们再看一下我们为列表编写的函数并更新它,以便函数内部发生的任何更改都不会更改initial_list。我们需要做的就是将传递给函数的参数从initial_list更改为initial_list-copy。


如您所见,这解决了题。原因如下using-copy-创建列表的单独副本,因此指向initial_list本身的a_list是一个新副本,而不是指向initial_list本身。在a_list之后,对该单个列表的任何更改都将更改(但不会更改initial_list列表本身),从而使initial_list的全局值保持不变。


然而,这个解决方案仍然不完美。因为-copy-要求您记住每次将参数传递给函数时添加全局值initial_list。否则,您可能会意外更改它。如果您不想担心这个题,您实际上可以在函数内创建列表的副本。


这样,我们就可以安全地传递可变的全局变量,比如在initial_list函数中,函数本身会创建一个副本,然后对该副本执行操作,因此全局值保持不变。


这种复制方法也适用于字典。与列表一样,您可以通过将-copy-参数添加到传递函数的位置来创建在函数中使用的副本,而无需更改原始变量。


然而,再次使用此方法意味着您必须记住每次将字典传递给make_percentages-函数时添加-copy-。如果您要经常使用此函数,那么在函数本身中实现副本可能是个好主意,这样您就不必记住它。


下面我们在函数本身中使用-copy-。这允许您使用作为参数传递的全局变量而不更改它们,并且Python函数控制列表和字典,并且不必记住为每个传递的参数复制、添加参数。


正如您所看到的,如果我们修改函数来创建字典的副本,然后按百分比更改该副本的计数,我们就可以实现我们想要的效果,而无需实际更改content_lateds。


因此


在Python函数控制列表和字典中,我们研究了可变和不可变可变数据类型之间的差异。我们已经了解了如何使用-copy-方法创建可变数据类型(例如列表和字典)的副本,以便您可以在函数中使用它们而无需更改其全局值。


三、元组列表字典哪个不可修改?

元组是不可变的序列,这意味着它们不能被添加、删除或修改。


本文地址:http://eptisonshop.com/post/26058.html
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

 发表评论


表情

还没有留言,还不快点抢沙发?