1. 程式人生 > 其它 >記錄學習《流暢的python》的一些知識-----元組(2)

記錄學習《流暢的python》的一些知識-----元組(2)

技術標籤:python列表元組numpy

開始記錄我學習《流暢的python》的過程

2020.12.28

1.陣列
如果需要一個只包含數字的列表,那麼array.array比list更高效。陣列支援所有跟可序列有關的操作,包括.pop、.insert、.extend。
例:建立一個有1000萬個隨機浮點數的陣列開始,到如何把這個陣列存放到檔案裡,再到如何從檔案讀取這個陣列。

from array import array
from random import random
floats = array('d', (random() for i in range(10**
7))) print(floats[-1]) fp = open('floats.bin', 'wb') floats.tofile(fp) fp.close() floats2 = array('d') fp = open('floats.bin', 'rb') floats2.fromfile(fp, 10**7) fp.close() print(floats2[-1]) print(floats2 == floats)

執行結果:
在這裡插入圖片描述
2.記憶體檢視
memoryview是一個內建類,它能讓使用者在不復制內容的情況下操作同一個陣列的不同切片。
memoryview.cast的概念跟陣列模組類似,能用不同的方式讀寫同一塊記憶體資料。而且內容位元組不會隨意移動,它會把同一塊記憶體裡的內容打包成一個全新的memoryview物件給你。

例:利用memoryview精確修改了一個數組的某個位元組,這個陣列的元素是16位二進位制整數。

from array import array
numbers = array('h', [-2, -1, 0 , 1 , 2])
memv = memoryview(numbers)
print(len(memv))
print(memv[0])

memv_oct = memv.cast('B')
print(memv_oct.tolist())

memv_oct[5] = 4
print(numbers)

執行結果:
在這裡插入圖片描述
把memv中的內容轉換成’B’型別,也就是無符號字元。

3.Numpy和Scipy


Numpy實現了多維同質陣列和矩陣,這些資料結構不但能處理數字,還能存放其他由使用者定義的記錄。通過Numpy,使用者能對這些資料結構裡的元素進行高效的操作。
SciPy是基於NumPy的另一個庫,它提供了很多跟科學計算有關的演算法,專為線性代數,數值積分和統計學而設計。
例:二維陣列的基本操作

import  numpy
a = numpy.arange(12)
print(a)
print(type(a))
print(a.shape)

a.shape = 3, 4
print(a)

print(a[2])

print(a[2, 1])

print(a[:, 1])

print(a.transpose())

執行結果:
在這裡插入圖片描述
4.雙向佇列
利用append和pop方法,可以把列表當作棧或者佇列來用、但是刪除列表的第一個元素之類的操作是很耗時的,因為這些操作會牽扯到移動列表裡的所元素。
collections.deque類是一個執行緒安全,可以快速從兩端新增或者刪除元素的資料型別。

from _collections import deque
dq = deque(range(10), maxlen=10)
print(dq)

dq.rotate(3)
print(dq)

dq.rotate(-4)
print(dq)

dq.appendleft(-1)
print(dq)

dq.extend([11, 22, 33])
print(dq)

dq.extendleft([10, 20, 30, 40])
print(dq)

執行結果:
在這裡插入圖片描述