python知識備忘集合(持續更新)

2021-08-02 13:39:41 字數 2465 閱讀 3318

********************==deque****************************************=

強化學習的experience replay 模組, 之前考慮到執行的速度,我一直用numpy陣列實現,但用起來並不方便,**也不簡潔。用deque必然方便多了,但執行速度怎樣?試過才知道。

from collections import deque

import time

d = deque(maxlen=1000000)

print d

d.extend([1,2,3])

print d

d.rotate(1)

print d

print d.count(1)

d.remove(2)

print d

d.pop()

print d

簡單記錄deque的主要操作,都很直觀的。remove()方法會從左至右丟棄第乙個匹配的物件。extend()方法可以新增乙個序列(用list包裝),rotate(1)方法類似於把佇列中所有元素的序號+1

值得注意的是:和使用陣列一樣,可以使用d[0]方法讀取和更改佇列中元素的值。

from collections import deque

import time

d = deque(maxlen=1000000)

print d[0]

d[0] = '666'

print d[0]

print d

關於deque的速度:
from collections import deque

import time

d = deque(maxlen=1000000)

for i in xrange(1000000):

t1 = time.time()

d.rotate(500000)

t2 = time.time()

print t2 - t1

t3 = time.time()

print t3 - t2

結果是

0.000247955322266

2.40802764893e-05

因此,對於1000000個元素的佇列,增和刪的操作,在最差的情況下,在耗時在10−

4 量級

2,查和改

from collections import deque

import time

d = deque(maxlen=1000000)

for i in xrange(1000000):

t1 = time.time()

print d[500000]

t2 = time.time()

print t2 - t1

t3 = time.time()

d[500001] = '333'

t4 = time.time()

print t4 - t3

結果是:

0.00019097328186

0.00026798248291

對於1000000個元素的佇列,在最壞的情況下,查和改的耗時在10−

4 量級

3,取樣

from collections import deque

import time

import random

d = deque(maxlen=1000000)

for i in xrange(1000000):

t1 = time.time()

random.sample(d,64)

t2 = time.time()

print t2 - t1

結果是:0.0023889541626

random.sample()方法是未經優化的,用下面這個方法可以獲得更快的速度

def

sample

(d,k):

s_list = numpy.random.randint(0,len(d)*2/k,k).tolist()

#print s_list

result_list =

for i in s_list:

d.rotate(i)

return result_list

用這個方法耗時:0.00147318840027

以上時間的測量結果是有小幅波動的,並不十分精確

總結,1000000個元素,基本就是experience replay 的規模了。deque和list相比,優勢在於1執行緒安全2從兩段訪問資料是o(1)速度。而list從左邊訪問是o(n)速度,從右邊訪問是o(1)速度。

Python筆記 列表的一些小知識點(持續更新哦)

六月你好呀,最近太忙啦,都沒空程式設計!夏令營報的很麻煩,幾乎佔據了我大部分時間。不多bb,直接開始講吧!下面要講的是python中列表的複製 只有常規複製,才會指向同乙個列表。eg.lst 1,2,3,4,5 lst2 lst lst2.clear print lst 而copy函式 list 和...

PYTHON常用小知識(持續更新)

python判斷檔案和資料夾是否存在 import os os.path.isfile test.txt 如果不存在就返回false os.path.exists directory 如果目錄不存在就返回false python時間的處理 from time import 將time引入進來 fti...

Python易混淆知識(持續更新)

readline 方法用於從檔案讀取整行,包括 n 字元。如果指定了乙個非負數的引數,則返回指定大小的位元組數,包括 n 字元。filename example.txt with open filename,r encoding utf 8 as t while true line t.readli...