excel中不允许使用的数据类型有(列表中不能存储数据类型不同的数据元素)

Excel表格网 2022-12-06 05:42 编辑:admin 139阅读

1. 列表中不能存储数据类型不同的数据元素

不能。

ArrayList对象不能存储基本类型,只能存储引用类型的数据。类似 <int> 不能写,但是存储基本数据类型对应的包装类型是可以的。所以,想要存储基本类型数据, <> 中的数据类型,必须转换后才能编写。

ArrayList 是大小可变的数组的实现,存储在内的数据称为元素。此类提供一些方法来操作内部存储的元素。 ArrayList 中可不断添加元素,其大小也自动增长。

2. 变量不可以存储的数据类型

变量的类别:

根据作用域可分为全局变量和局部变量。

根据生存周期可分为静态存储方式和动态存储方式,具体地又分为自动的(auto)、静态的(static)、寄存器的(register)、外部的(extern)。

静态存储方式是指在程序运行期间分配固定的存储空间的方式,动态存储方式是在程序运行期间根据需要进行动态的分配存储空间的方式。

每一个变量均有作用域和存储类别两个属性,这些属性共同用于描述一个变量,这些不同类型的变量与存储位置的关系如下:

外部变量(全局变量)、静态外部变量、静态局部变量存储在静态存储区。

自动局部变量(局部变量默认为自动局部变量)、函数形参存储在动态存储区,不论是静态存储区还是动态存储区均属于内存中的用户区。

但是,寄存器变量是存储在cpu寄存器中的而不是内存中。

首先说明一下与作用域相关的几个属性:

局部变量:在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用它们,在此函数以外是不能使用这些变量的,这种类型的变量就称为“局部变量”。

全局变量:在函数外定义的变量,可以为本源文件中其它函数所公用,有效范围为从定义变量的位置开始到本源文件结束,这种类型的变量就称为“全局变量”。

接下来说明一下与存储类型相关的几个属性:

atuo:在声明局部变量时,若不指定static,默认均是auto,这类变量都是动态分配存储空间的,数据存储在动态存储区中。

static:在声明局部变量时,使用关键字static将局部变量指定为“静态局部变量”,这样在函数调用结束后不消失而保留原值,即占用的存储单元不释放,在下一次函数调用时,该变量已有值就是上次函数调用结束时的值。

register:在声明动态局部变量或者函数形参时,可将变量声明为register,这样编译系统就会为变量分配一个寄存器而不是内存空间,通过这种方式可提升对某些局部变量频繁调用的程序的性能。(寄存器运算速度远高于内存)

extern:用于扩展全局变量的作用域,比如如果函数想引用一个外部变量,但该外部变量在该函数后定义,那么这个函数需要使用extern来声明变量,这样才能使用在该函数后面定义的全局变量。此外,extern还可以在多文件的程序中声明外部变量。

由于变量从不同维度划分,形成了多种错综复杂的关系,在学习编程的时候需要重点关注。

3. 数组只能存储相同数据类型的元素

建一个大数组c,容量为数组a和b的容量之和 先将一个数组a的数据循环放入c, 放入时检验是否存在,存在则不放入 继续将数组b的数据循环放入c,放入时检验是否存在,存在则不放入 数组c为需要的合并数组

4. 列表只能存储同一类型的数据对吗

数据类型有八种,分别是:数组、栈、队列、链表、树、散列表、堆、图

常用数据结构

各种数据结构的优缺点

1、数组

数组是可以在内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进行访问,数组下标从0开始。例如下面这段代码就是将数组的第一个元素赋值为 1:

int[] data = new int[100];data[0] = 1;

优点:

1、按照索引查询元素速度快

2、按照索引遍历数组方便

缺点:

1、数组的大小固定后就无法扩容了

2、数组只能存储一种类型的数据

3、添加,删除的操作慢,因为要移动其他的元素。

适用场景:频繁查询,对存储空间要求不大,很少增加和删除的情况

2、栈

栈是一种特殊的线性表,仅能在线性表的一端操作,栈顶允许操作,栈底不允许操作。 栈的特点是:先进后出,或者说是后进先出,从栈顶放入元素的操作叫入栈,取出元素叫出栈。

栈的结构就像一个集装箱,越先放进去的东西越晚才能拿出来,所以,栈常应用于实现递归功能方面的场景,例如斐波那契数列。

3、队列

队列与栈一样,也是一种线性表,不同的是,队列可以在一端添加元素,在另一端取出元素,也就是:先进先出。从一端放入元素的操作称为入队,取出元素为出队。使用场景:因为队列先进先出的特点,在多线程阻塞队列管理中非常适用。

4、链表

链表是物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现,每个元素包含两个节点,一个是存储元素的数据域 (内存空间),另一个是指向下一个节点地址的指针域。根据指针的指向,链表能形成不同的结构,例如单链表,双向链表,循环链表等。

链表的优点:

链表是很常用的一种数据结构,不需要初始化容量,可以任意加减元素;

添加或者删除元素时只需要改变前后两个元素节点的指针域指向地址即可,所以添加,删除很快;

缺点:

因为含有大量的指针域,占用空间较大;

查找元素需要遍历链表来查找,非常耗时。

适用场景:

数据量较小,需要频繁增加,删除操作的场景

5、树

树是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫作 “树” 是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:

每个节点有零个或多个子节点;

没有父节点的节点称为根节点;

每一个非根节点有且只有一个父节点;

除了根节点外,每个子节点可以分为多个不相交的子树;

在日常的应用中,我们讨论和用得更多的是树的其中一种结构,就是二叉树。

二叉树是树的特殊一种,具有如下特点:

1、每个结点最多有两棵子树,节点的度最大为2。

2、左子树和右子树是有顺序的,次序不能颠倒。

3、即使某节点只有一个子树,也要区分左右子树。

二叉树是一种比较有用的折中方案,它添加,删除元素都很快,并且在查找方面也有很多的算法优化,所以,二叉树既有链表的好处,也有数组的好处,是两者的优化方案,在处理大批量的动态数据方面非常有用。

扩展:

二叉树有很多扩展的数据结构,包括平衡二叉树、红黑树、B+树等,这些数据结构二叉树的基础上衍生了很多的功能,在实际应用中广泛用到,例如mysql的数据库索引结构用的就是B+树,还有HashMap的底层源码中用到了红黑树。这些二叉树的功能强大,但算法上比较复杂,想学习的话还是需要花时间去深入的。

6、散列表

散列表,也叫哈希表,是根据关键码和值 (key和value) 直接进行访问的数据结构,通过key和value来映射到集合中的一个位置,这样就可以很快找到集合中的对应元素。

记录的存储位置=f(key)

这里的对应关系 f 成为散列函数,又称为哈希 (hash函数),而散列表就是把Key通过一个固定的算法函数既所谓的哈希函数转换成一个整形数字,然后就将该数字对数组长度进行取余,取余结果就当作数组的下标,将value存储在以该数字为下标的数组空间里,这种存储空间可以充分利用数组的查找优势来查找元素,所以查找的速度很快。

哈希表在应用中也是比较常见的,就如Java中有些集合类就是借鉴了哈希原理构造的,例如HashMap,HashTable等,利用hash表的优势,对于集合的查找元素时非常方便的,然而,因为哈希表是基于数组衍生的数据结构,在添加删除元素方面是比较慢的,所以很多时候需要用到一种数组链表来做,也就是拉链法。拉链法是数组结合链表的一种结构,较早前的hashMap底层的存储就是采用这种结构,直到jdk1.8之后才换成了数组加红黑树的结构

哈希表的应用场景很多,当然也有很多问题要考虑,比如哈希冲突的问题,如果处理得不好会浪费大量的时间,导致应用崩溃。

7、堆

堆是一种比较特殊的数据结构,可以被看作一棵树的数组对象,具有以下的性质:

堆中某个节点的值总是不大于或不小于其父节点的值;

堆总是一个完全二叉树。

将根节点最大的堆叫作最大堆或大根堆,根节点最小的堆叫作最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。

因为堆有序的特点,一般用来做数组中的排序,称为堆排序。

8、图

图是由结点的有穷集合V和边的集合E组成。其中,为了与树形结构加以区别,在图结构中常常将结点称为顶点,边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。

图是一种比较复杂的数据结构,在存储数据上有着比较复杂和高效的算法,分别有邻接矩阵 、邻接表、十字链表、邻接多重表、边集数组等存储结构。

5. 单元格存放的数据类型不能是

这个可能是 你在大部分都是数字的单元格列里输入了文本,他默认判定此列为数字 所以文本没有导入进来,如果你确认需要是文本格式,你修改这个字段儿的格式属性就可以了…… 要让两个表对应的字段属性一致……

6. 列表可以存储不同的数据类型吗

 Python的函数(内置函数和我们自己编写的自定义函数)是处理数据的关键工具。但是他们对数据的处理可能会有些混乱,如果我们不知道发生了什么,可能会导致分析中的严重错误。

  在python函数控制列表和词典中,我们将仔细研究Python在函数内部进行操作时如何对待不同的数据类型,并学习如何确保仅在需要更改数据时才更改数据。

  功能中的内存隔离

  要了解Python如何处理函数内部的全局变量,让我们做一些实验。我们将创建两个全局变量number_1和number_2,并将它们分配给整数5and 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个应用程序的等级为“ 9+”,等等。) 。假设我们要为每个年龄等级计算一个百分比,这样我们就可以了解到哪个年龄等级在App Store中最常见。

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

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

  为了图什么应用程序的比例下降到每一个年龄分级,我们需要知道应用程序的总数,所以我们先设置一个所谓的新的变量total,以0通过在每个键,然后循环a_dictionary,将它添加到total。

  一旦完成,我们要做的就是a_dictionary再次循环遍历,将每个条目除以总数,然后将结果乘以100。这将为我们提供带有百分比的字典。

  但是,当我们使用global content_ratings作为该新函数的参数时会发生什么呢?

  就像我们在列表中看到的一样content_ratings,即使仅在make_percentages()我们创建的函数内部对其进行了修改,我们的全局变量也已更改。

  那么,这里到底发生了什么?我们碰到了可变和不可变数据类型之间的差异。

  可变和不可变数据类型

  在Python中,数据类型可以是可变的(可变的)或不可变的(不变的)。尽管我们在Python入门中使用的大多数数据类型都是不可变的(包括整数,浮点数,字符串,布尔值和元组),但列表和字典却是可变的。这意味着全局列表或字典即使在函数内部使用时也可以更改,就像我们在上面的示例中看到的那样。

  要了解可变(可变)和不可变(不变)之间的区别,研究一下Python如何实际处理这些变量是有帮助的。

  让我们开始考虑一个简单的变量赋值:

  变量名的a作用类似于指向的指针5,它可以帮助我们5在需要时进行检索。

  5是整数,整数是不可变的数据类型。如果数据类型是不可变的,则意味着它一旦创建便无法更新。如果这样做a += 1,我们实际上5并没有更新到6。在下面的动画中,我们可以看到:

  1)a最初指向5。

  2)a += 1运行,并将指针从5移到6,实际上并没有改变number 5。

  列表和字典等可变数据类型的行为有所不同。它们可以被更新。因此,例如,让我们列出一个非常简单的列表:

  如果将a附加3到此列表的末尾,我们不仅会指向list_1其他列表,还会直接更新现有列表:

  即使我们创建了多个列表变量,只要它们指向同一个列表,更改该列表时它们也会全部更新,如下面的代码所示:

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

  这解释了为什么在我们较早地尝试使用列表和字典时更改了全局变量的原因。由于列表和字典是可变的,因此更改它们(即使在函数内部)也将更改列表或字典本身,而对于不可变的数据类型则不是这种情况。

  保持可变数据类型不变

  一般来说,我们不希望函数更改全局变量,即使它们包含诸如列表或字典之类的可变数据类型也是如此。那是因为在更复杂的分析和程序中,我们可能经常使用许多不同的功能。如果所有人都在更改他们正在处理的列表和词典,则很难跟踪正在更改的内容。

  值得庆幸的是,有一个简单的方法可以解决此问题:我们可以使用内置的Python方法来复制列表或字典.copy()。

  如果您尚未了解方法,请不要担心。它们在我们的Python中级课程中已涉及到,但是对于本教程而言,您需要知道的是它的.copy()工作方式如下.append():

  让我们再来看一下我们为列表编写的函数,并对其进行更新,以使函数内部发生的变化不会改变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()方法也适用于词典。与列表一样,我们可以简单地添加.copy()参数到传递函数的位置,以创建一个副本,该副本将用于该函数,而无需更改原始变量:

  但是,再次使用该方法意味着我们需要记住.copy() 每次将字典传递给make_percentages()函数时都要添加。如果我们要经常使用此函数,则最好将复制实现到函数本身中,这样就不必记住这样做了。

  在下面,我们将.copy()在函数本身内部使用。这将确保我们可以在不更改作为参数传递给它的全局变量的情况下使用它,python函数控制列表和词典https://www.aaa-cg.com.cn/data/2321.html并且无需记住要.copy()为传递的每个参数添加参数。

  如我们所见,修改函数以创建字典的副本,然后仅在该副本中将计数更改为百分比已使我们能够执行所需的操作,而无需实际更改content_ratings。

  结论

  在python函数控制列表和词典中,我们研究了可变数据类型和可变数据类型之间的区别,可变数据类型可以更改,可变数据类型不能更改。我们了解了如何使用该方法.copy()制作可变数据类型(如列表和字典)的副本,以便我们可以在不更改其全局值的情况下在函数中使用它们。

https://www.toutiao.com/i6836270942046388748/

7. 集合中不能存放基本数据类型,而只能存放引用数据类型

不可以的。

因为,不能为基础类型,但可以是引用类型。

所以,不能为int,但可以是Integer。

Java集合,如Map、Set、List等所有集合只能存放引用类型数据,它们都是存放引用类型数据的容器,不能存放如int、long、float、double等基础类型的数据。

8. 列表中可以包含任何数据类型吗

字符串包括数字,列表是用方括号表示的数据的集合,列表中的数据可以是多种数据类型,但是一般情况下,在一个列表中使用同一个数据类型。

顶一下
(0)
0%
踩一下
(0)
0%
相关评论
我要评论
点击我更换图片