書名: 商品期貨量化交易實戰:以Python為工具作者名: 胡凱博等編著本章字數: 2520字更新時間: 2022-04-29 16:52:03
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元素)。