- 商品期货量化交易实战:以Python为工具
- 胡凯博等编著
- 2520字
- 2024-11-01 22:21:24
2.6 Python中的列表和字典
列表和字典都是Python中的常用数据结构,列表是有序数据的集合,字典是无序数据的集合。列表中的每个元素都有其相应的索引值,字典中的每个元素都包含键值对。
2.6.1 列表索引
列表是Python中的基本数据结构,列表中的每个元素都有一个索引值,用于标记列表中元素的位置,第1个元素的索引值为0,第2个元素的索引值为1,以此类推。列表中的元素可以是不同类型的数据,示例代码如下:
输出结果如下:
在上述代码中,首先定义了一个二维列表变量,然后通过列表索引获取其中的元素,当索引值为0时,获取该列表变量中的第1个元素;当索引值为1时,获取该列表变量中的第2个元素;以此类推。
2.6.2 列表切片
通过列表切片,可以获取列表中的部分元素。列表切片与字符串切片类似,也需要遵循左闭右开的原则,即从“起始”位开始,到“结束”位的前一位结束(不包含结束位本身)。最后一个元素的索引值是-1。也可以用len()函数获取列表中的元素个数。示例代码如下:
输出结果如下:
列表切片与字符串切片的使用方法一致。在上述代码中,首先定义了一个列表变量,在列表变量后面添加“[1:3]”,表示获取该列表变量中索引值为1~2的元素,即获取列表变量中的第2~3个元素;在列表变量后面添加“[-1]”,表示获取该列表变量中的最后一个元素。
2.6.3 列表中元素的修改与删除
列表是可变的数据类型,列表中的元素可以被修改、删除。直接使用赋值操作符就能修改列表中的元素值。例如,将列表中索引值为1的元素值修改为22(原本是2),代码如下:
输出结果如下:
Python提供了4种用于删除列表中元素的方法,分别为del关键字、pop()函数、remove()函数、clear()函数,不同的方法适用于不同的场景。示例代码如下:
输出结果如下:
在上述代码中,首先使用del关键字删除了列表中索引值为1的元素“2”,然后使用pop()函数删除列表中的最后一个元素,接着使用remove()函数删除列表中值为“5”的元素,最后使用clear()函数删除列表中的所有元素。
2.6.4 二维列表
列表中的元素可以是任意一种数据类型,包括列表。如果一个列表中包含列表,那么这个列表就是二维列表。在量化交易中心,二维列表通常在技术指标中使用。获取二维列表中列表元素中元素的示例代码如下:
输出结果如下:
MACD指标一共有3个数据,分别为dif线、dea线、macd量柱。如果使用talib库中的MACD指标计算MACD的值,则会返回一个二维列表。该二维列表中的第1个元素是MACD指标中dif线的数据,第2个元素是MACD指标中dea线的数据,第3个元素是MACD指标中macd量柱的数据。示例代码如下:
输出结果如下:
在上述代码中,首先定义了一个二维列表变量macd,该变量中一共有3个元素,第1个元素是dif线的数据,第2个元素是dea线的数据,第3个元素是macd量柱的数据。并且每个元素都是列表,如果要获取最新的dif值(dif线的数据中的倒数第1个元素值),那么macd的索引是“[0][-1]”。
2.6.5 列表中元素的增加
在Python中,append()函数主要用于向列表尾部追加元素,如果所追加的元素是个列表,那么这个列表会作为一个整体进行追加。示例代码如下:
输出结果如下:
注意:在列表中增加元素后,列表的长度会自动增加。
2.6.6 列表反向排序
reverse是列表中的一个非常实用的内置函数,它可以让列表中的元素反向排序,该函数可以返回一个逆序序列的迭代器(用于遍历该逆序序列)。示例代码如下:
输出结果如下:
在上述代码中,首先定义了一个列表变量arr=[1,2,3,4],然后调用了该列表变量的reverse()函数,对该列表变量中的元素进行反向排序,输出结果为[4,3,2,1]。
2.6.7 创建字典
字典中的元素可以是任意数据类型的数据,字典中的键名(key)和键值(value)是一一对应的,对应的一对键名和键值称为键值对。在键值对中,键名是数据的名字,键值是数据。字典使用英文冒号“:”分隔键值对中的键名和键值,键值对之间用英文逗号“,”分隔,整个字典用花括号“{}”包裹起来。示例代码如下:
字典中的键名必须是唯一的,键值可以是重复的。键值可以是任何数据类型的数据,但是键名必须是不可变数据类型的数据,如数值、字符串都可以作为键名。字典的创建方法很简单,示例代码如下:
输出结果如下:
在上述代码中,首先定义了一个字典,并且将其赋给boy变量,然后使用Log()函数输出字典变量boy,在日志中会显示字典变量boy中的键值对。
2.6.8 访问字典中的键值
汉语字典可以通过拼音查汉字,Python字典访问基于这个原理,可以通过键名(key)访问字典中的键值(value)。具体方法为,在字典变量名后面写方括号“[]”,然后在方括号内写要访问的键值对应的键名。示例代码如下:
输出结果如下:
注意:在访问字典中的键值前,需要先判断字典中是否包含该键值对,如果访问的字典中并不存在该键值对,那么程序会报错。
2.6.9 字典中元素的增加与修改
字典是可变数据类型的数据,也就是说,可以对字典中的元素进行增加、删除、修改、查询操作。如何增加和修改字典中的元素呢?和访问字典中键值的方式一样,只不过是对其进行赋值操作。示例代码如下:
输出结果如下:
在上述代码中,首先创建了一个字典变量boy,该字典变量中包含3个键名,分别为"name"、"age"和"Email",由于字典变量boy中没有键名为"height"的键值对,因此创建了该键值对并为其赋值;由于字典中有键名为"Email"的键值对,因此更新该键值对的键值。
2.6.10 字典中元素的删除
Python中的字典有4种用于删除元素的方法,适用于不同的应用场景。其中del是全局方法,既能删除单个元素,又能删除整个字典,示例代码如下:
输出结果如下:
在上述代码中,首先创建了一个字典变量boy,然后删除了字典变量中的键名为"age"的元素(键值对),最后将字典变量boy删除了。如果del关键字后面跟的是一个字典名(del boy),那么删除的是整个字典(boy);如果del关键字后面跟的是字典名[键名](del boy["age"]),那么删除的是该字典中该键名对应的元素(键值对)。如果要清空字典中的所有元素,则可以直接调用字典的clear()函数,示例代码如下:
输出结果如下:
注意:字典中的元素可以是任意数据类型的数据,但是字典中的键名必须是不可变数据类型的数据,并且字典中的键名不能重复,如果在创建一个字典时出现两次相同的键名,那么只会记录最后一个键名对应的键值对。示例代码如下:
输出结果如下:
在上述代码中,创建了一个字典变量boy,但是在该字典变量中有两个键名为"name"的键值对(name元素),那么后面的键名"name"对应的键值(name元素的值)会覆盖前面的键名"name"对应的键值(name元素)。