一维数据和二维数据

Posted kenny-feng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一维数据和二维数据相关的知识,希望对你有一定的参考价值。

此文章为本人学习所得,如有不足之处,欢迎指正,分享原创,一起进步 

维度:数据的组织形式

技术图片


一维数据

由对等关系的有序或无序数据构成,采用线性方式(一条直线排开)组织

对等关系:这些数据平级关系(不是包含、从属关系)

一维数据的表示-----

如果数据间有序:使用列表类型。如:一维列表ls = [3.1 , 3.02 , 4.15]
如果数据间无序:使用集合类型,如:一维集合st = 4.15 , 3.02 , 3.1 

切记:for循环可以遍历数据,进而对每个数据进行处理

一维数据的存储-----

方式:空格分隔、逗号分隔、特殊符号(如:$)

缺点:数据中不能出现分隔符

原因:用某符号作为数据的分隔符,那么数据本身就不能出现该符号,否则就无法判断是分隔符还是一个标点符号,所以选择根据数据的特点,去选择哪种符号作为分隔符

一维数据的处理-----

(一)读入:从以$为分隔符的文件中读入数据。文件→解释器(idle中)

1 fi=open(“abc.txt”)
2 txt = fi.read()        #得到一整串的str文本
3 ls=txt.split("$")    #文件的分隔符是什么,str.split()中的符号就是什么。得到以这些数据为str元素的列表。若每行有回车,则换行符属于最后一个数据的一部分
4 fi.close()

Example1:(以一个$作为分隔符)

技术图片

技术图片

结果:

技术图片

Example2:(以两个$作为分隔符)

技术图片

结果:

技术图片

 (二)写入:将以$为分隔符的数据写入文件。解释器(idle中)→文件

1 ls=[中国,美国,日本]        #这是将要写入文件的数据,用列表形式组织(存放再idle中)
2 fi=open("123.txt","w")        #创建空文件并待写(做好写入的准备,但还没开始写入),如果已有该文件,则会先清空之前的内容,再处于待写状态
3 txt = "@".join(ls)    #打算用哪种分隔符,就用哪种。"".join的作用:将引号内的符号插进列表ls的元素之间,并去掉中括号和各元素外面的引号
4 fi.write(txt)
5 fi.close()

结果:

技术图片

维数据

由多个一维数据构成,是一维数据的组合形式。也称为表格数据,其中,表头是二维数据的一部分,也可以不作为其中的一部分

维数据的表示-----

用二维列表表示

二维列表:本身是列表,里面的元素也是列表,即列表内还有列表。如下:

技术图片

 里面的元素之间可以不换行,但必须要有分隔符。里面元素之间的排版随意,但为了美观,建议换行且对齐工整:

技术图片

 二维数据的存储-----

ls[row][column],先行后列,按行存

CSV数据存储格式

(一)语法规则:

(1)CSV:Comma-Separated Values

(2)国际通用的一二维数据存储格式,一般.csv扩展名

(3)每行一个一维数据,无空行。采用逗号分隔,逗号为英文半角逗号,逗号与数据之间无额外空格

(4)Excel和txt均可读入输出,一般编辑软件都可以产生

(5)如果某个元素缺失,逗号仍要保留,二维数据的表头可以作为数据存储,也可以另行存储。如下:

技术图片

(二)具体实例:

假设有“country.csv”文件如下:

技术图片

step1:先看看从文件读入到 idle 中是什么情况:

1 fi = open("country.csv","r")
2 for c in fi:
3     print(c)

结果:

技术图片

(三)实例结论:

(1)对比csv文件,读入是按行读入,且每行末尾隐含换行符,所以结果有空行(print语句不会打印出换行符\\n),所以在按行遍历时,要先去掉换行符。

(2)结果中的内容是逗号分隔,即遍历csv的过程中,将隐形的分隔符遍历了出来 

(3)读取csv文件跟读取txt所返回的类型都是str。实际上,不管是什么文件,也不管文件的内容是什么类型,将文件读取到idle中,都是以str类型返回。如遍历句柄、read()readline()等。如下: 

1 fi = open("country.csv","r")
2 for c in fi:
3     print(type(c))

 结果:

技术图片

补充:

(一)删除每行末尾的换行符有三种方法: 

(1)str.strip(“\\n”):删除首尾的”\\n” 

(2)str.replace(“\\n”,””):替换”\\n”为空 

(3)str = str[0:-1]:切片去掉末尾,临时性改变,必须赋值

(二)在idle中创建二维列表ls,并对里面的数据进行操作的方法:二层循环,逐一遍历。如下: 

1 ls=[[],[],[],......,[]]    创建二维列表
2 for row in ls:
3     for column in row:
4         print(ls[row][column])

Notes:(无论一维还是二维)

(1)分隔符不能缺少:
技术图片

 

(2)fi.close()不要缺少,否则写入数据后,目标文件还是原样,因为还没结束释放  

(3)读入用到str.split(),写入用到str.join()

(4)切记:

读入:从文件读入到idle中,最终要将结果转为相应维度的列表形式。如文件是一维数据,则读取的最终结果应是一维列表 [ ];文件是二维数据,则读取的最终结果应是二维列表 [ [], [],......,[] ]

写入:从idle写入到文件中,最初要将数据变为列表形式。如想写入一维数据,则要用一维列表来组织这些数据 [ ] ;想写入二维数据,则用二维列表来组织这些数据 [ [],[],......,[] ],但最终要转为str形式,这样才能写入文件(不接受以list形式写入),否则:

技术图片

 

以上是关于一维数据和二维数据的主要内容,如果未能解决你的问题,请参考以下文章

如何把二维表转成一维表

Java中一维,二维数组的静态和动态初始化

php 一个多维数组根据一维数组筛选数据,得到新数组

C++ 一维数组及二维数组的特征和用法

Java中一维数组和二维数组的定义方式

数据库中的二维表—巧借Excel