技巧7 【操作】元组、列表与字典的应用
在Python中,没有矩阵这种数据类型,但是有元组、列表与字典这3种类型。其中,元组与列表很相似,都是用来存储数据的序列,也都支持多维的序列(矩阵);唯一不同之处就是元组在定义完成后,是不允许更改其内部值的,而列表可以更改其内部值。字典在对象中加上了索引值。
下面通过一个示例来介绍元组与列表的差异。
>>> x=[1,2,3] >>> x[2]=4 #列表对象可以被修改 >>> x [1, 2, 4] >>> x=(1,2,3) >>> x[2]=4 #元组对象无法被修改 TracebacK(most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object does not support item assignment
下面分别介绍3种对象的应用。
1.元组(tuple)
元组定义以后不得更改其内部元素。下面介绍元组的基本用法。
(1)定义元组
元组是用小括号来定义对象的,示例如下:
>>> x=(1,2,3,4,5,6) #定义一维的元组 >>> x (1, 2, 3, 4, 5, 6) >>> x=((1,2),(3,4),(5,6)) #定义二维的元组 >>> x ((1, 2), (3, 4), (5, 6))
也可以在一行中定义多个变量,示例如下:
>>> x,y = (1,2,3),(3,4,5) >>> x (1, 2, 3) >>> y (3, 4, 5)
(2)删除元组变量
通过del可以删除元组,示例如下:
>>> x=((1,2),(3,4),(5,6)) >>> x ((1, 2), (3, 4), (5, 6)) >>> del x >>> x TracebacK(most recent call last): File "<stdin>", line 1, in <module> NameError: name 'x' is not defined
(3)访问元组
在Python元组对象中,索引值都是从0开始的。访问元组的示例如下:
>>> x=((1,2),(3,4),(5,6)) >>> x ((1, 2), (3, 4), (5, 6)) >>> x[0] (1, 2) >>> x[0][0] 1
(4)元组计算
元组计算是指将元组进行组合或复制。若要进行数值计算,则需取出元组内的值再进行计算,示例如下:
>>> x=(1,2,3) >>> y=(7,8,9) >>> x+y #两个元组组合 (1, 2, 3, 7, 8, 9) >>> x*3 #元组倍数复制 (1, 2, 3, 1, 2, 3, 1, 2, 3)
(5)在函数中的应用
元组也可以用于max、min函数中,示例如下:
>>> x (1, 2, 3) >>> >>> max(x) 3 >>> min(x) 1
(6)在判断中的应用
Python提供了in指令,用来判断该元素是否在tuple中,示例如下:
>>> x (1, 2, 3) >>> 3 in x True >>> 4 in x False
(7)在循环中的应用
Python的元组对象可以直接用来进行循环计算。用户可以利用这个特性来编写程序代码,示例如下:
>>> x (1, 2, 3) >>> for i in x: ... print (i) ... 1 2 3
2.列表(list)
列表是Python中定义列表的语法。与元组的不同在于,列表可以变更内部元素值。下面介绍list的基本用法。
(1)定义列表
列表是用中括号来定义对象的,示例如下:
>>> x=[1,2,3,4,5,6] >>> x [1, 2, 3, 4, 5, 6] >>> x=[[1,2],[4,5],[7,8]] >>> x [[1, 2], [4, 5], [7, 8]]
也可以在一行中定义多个列表变量,示例如下:
>>> x,y=[1,2,3],[6,7,8] >>> x [1, 2, 3] >>> y [6, 7, 8]
(2)删除列表变量
通过del可以删除列表,示例如下:
>>> x=[[1,2],[4,5],[7,8]] >>> x [[1, 2], [4, 5], [7, 8]] >>> del x >>> x Traceback(most recent call last): File "<stdin>", line 1, in <module> NameError: name 'x' is not defined
(3)访问列表
在Python列表对象中,列表的索引是从0开始的。下面介绍如何访问列表,示例如下:
>>> x [1, 2, 3] >>> x[0] 1 >>> x[:2] [1, 2] >>> x=[[1,2],[4,5],[7,8]] >>> x[0][0] 1 >>> x[1][1] 5
(4)计算列表
这里所指的计算是将列表组合或复制。若要进行数值计算,则需先取出列表内的值再进行计算,操作如下:
>>> x,y=[1,2,3],[6,7,8] >>> x+y [1, 2, 3, 6, 7, 8] >>> x*3 [1, 2, 3, 1, 2, 3, 1, 2, 3]
(5)函数应用
由于可以更改列表的元素,因此可以使用相对较多的函数。
① append函数可以将参数添加到列表的尾部,示例如下:
>>> x=[45,72,65,21,87] >>> x [45, 72, 65, 21, 87] >>> x.append(100) >>> x [45, 72, 65, 21, 87, 100]
② count函数可以计算该值在列表中的个数,示例如下:
>>> x [45, 72, 65, 21, 87, 100] >>> x.count(5) 0 >>> x.count(65) 1
③ extend函数可以将多个列表汇总起来,示例如下:
>>> x [45, 72, 65, 21, 87, 100] >>> >>> x.extend([44,55]) >>> x [45, 72, 65, 21, 87, 100, 44, 55]
④ index函数可以获取特定元素在列表当中的位置,示例如下:
>>> x [45, 72, 65, 21, 87, 100, 44, 55] >>> x.index(65) 2 >>> x.index(100) 5
⑤ remove函数可以删除列表里面的特定元素,示例如下:
>>> x [1, 2, 3, 4, 5] >>> x.remove(4) >>> x [1, 2, 3, 5]
⑥ reverse函数可以将整个列表的内容反转,示例如下:
>>> x [1, 2, 3, 5] >>> x.reverse() >>> x [5, 3, 2, 1]
⑦ sort函数可以将整个列表按照从小到大的顺序排序,示例如下:
>>> x [5, 3, 2, 1] >>> x.sort() >>> x [1, 2, 3, 5]
(6)在判断中的应用
Python提供了in指令,可以判断该元素是否在列表中,示例如下:
>>> x=[1,2,3,4,5,6,7] >>> 5 in x True >>> 8 in x False
(7)在循环中的应用
Python的列表对象可以直接用来进行循环计算。用户可以利用这个特性来编写程序代码,示例如下:
>>> x=[1,2,3,4,5,6,7] >>> sum=0 >>> for i in x: ... sum+=i #缩进 ... >>> sum 28
(8)列表解析式
列表解析式能够通过简短的程序代码,将一个列表转换为另一个列表。简单来说,有点像在取该列表的子集合,但又不全然如此。在列表解析式中还可以进行栈位的判断、计算,实际上可以实现的功能相当多。
从操作上来说,就是通过循环来进行列表的判断和计算,但列表解析式不需要通过换行就可以实现循环。但就功能上来说,还是有某些限制,例如不能在列表解析式中进行嵌套循环。
列表解析式常用于读取文件、数据筛选等。示例如下:
>>> content = [ line for line in open('Futures_20170815_I020.csv')] #读取文件内容注 >>> content[1:10] ['8450010,8450009,TXFH7,128,10310,732,732,202,349\n', '8450011,8450010,TXFH7,128, 10309,4,736,206,350\n', '8450011,8450010,TXFH7,128,10309,1,737,207,351\n', '8450011,8450010,TXFH7,128,10310,1,738,208,352\n', '8450011,8450010,TXFH7,128, 10310,1,739,209,353\n', '8450011,8450010,TXFH7,128,10309,2,741,210,354\n', '8450011,8450011,TXFH7,128,10309,1,742,211,355\n', '8450013,8450011,TXFH7,128, 10310,1,743,212,356\n', '8450013,8450011,TXFH7,128,10310,1,744,213,357\n'] >>> I020 = [ line.strip('\n').split(",") for line in content][1:] >>> I020[1:10] [['8450011', '8450010', 'TXFH7', '128', '10309', '4', '736', '206', '350'], ['8450011', '8450010', 'TXFH7', '128', '10309', '1', '737', '207', '351'], ['8450011', '8450010', 'TXFH7', '128', '10310', '1', '738', '208', '352'], ['8450011', '8450010', 'TXFH7', '128', '10310', '1', '739', '209', '353'], ['8450011', '8450010', 'TXFH7', '128', '10309', '2', '741', '210', '354'], ['8450011', '8450011', 'TXFH7', '128', '10309', '1', '742', '211', '355'], ['8450013', '8450011', 'TXFH7', '128', '10310', '1', '743', '212', '356'], ['8450013', '8450011', 'TXFH7', '128', '10310', '1', '744', '213', '357'], ['8450013', '8450012', 'TXFH7', '129', '10310', '2', '749', '214', '362']]
注:在读取文件内容时,本示例所引用的csv文件位于C:\Python37,若读者将csv文件保存于其他位置,请在代码中加入csv文件的存储路径。
3.字典(dictionary)
字典是带有索引的列表,在每个值之前都会加上索引,所以大多数操作都会通过索引来进行取值。
(1)定义字典
字典用大括号来定义,示例如下:
>>> x={'one':123,'two':345,'three':567} >>> x {'one': 123, 'two': 345, 'three': 567}
(2)删除字典变量
用del可以删除字典,示例如下:
>>> x {'one': 123, 'two': 345, 'three': 567} >>> del x >>> x Traceback(most recent call last): File "<stdin>", line 1, in <module> NameError: name 'x' is not defined
(3)访问字典
基于字典的存储结构只能通过index访问,示例如下:
>>> x={'one':123,'two':345,'three':567} >>> x {'one': 123, 'two': 345, 'three': 567} >>> x['one'] 123 >>> x['three'] 567 >>> x[0] Traceback(most recent call last): File "<stdin>", line 1, in <module> KeyError: 0
(4)函数应用
① len函数可以查看字典对象的长度,示例如下:
>>> x {'one': 123, 'two': 345, 'three': 567} >>> len(x) 3
② copy函数可以复制相同的字典对象,示例如下:
>>> x.copy()
{ 'one': 123, 'two': 345, 'three': 567}
③ clear函数可以清除字典对象,示例如下:
>>> x.clear() >>> x {}
④ items函数可以将字典转换成list对象,示例如下:
>>> x.items()
dict_items([('one', 123), ('two', 345), ('three', 567)])