2021-2-1
2.雜記
參考部落格
1.1節點類
class
node
:'''
data: 節點儲存的資料
_next: 儲存下乙個節點物件
'''def__init__
(self, data, pnext=
none):
self.data = data
self._next = pnext
def__repr__
(self)
:'''
用來定義node的字元輸出,
print為輸出data
'''return
str(self.data)
1.2鍊錶類
屬性:
方法:1.2.1判斷是否為空: isempty()
def
isempty
(self)
:return self.length ==
0
def
(self, dataornode)
: item =
none
ifisinstance
(dataornode, node)
: item = dataornode
else
: item = node(dataornode)
ifnot self.head:
self.head = item
self.length +=
1else
: node = self.head
while node._next:
node = node._next
node._next = item
self.length +=
1
1.2.3刪除乙個節點: delete()#刪除乙個節點之後記得要把鍊錶長度減一
defdelete
(self, index)
:if self.isempty():
print
"this chain table is empty."
return
if index <
0or index >= self.length:
print
'error: out of index'
return
#要注意刪除第乙個節點的情況
#如果有空的頭節點就不用這樣
if index ==0:
self.head = self.head._next
self.length -=
1return
#prev為儲存前導節點
#node為儲存當前節點
#當j與index相等時就相當於找到要刪除的節點
j =0 node = self.head
prev = self.head
while node._next and j < index:
prev = node
node = node._next
j +=
1if j == index:
prev._next = node._next
self.length -=
1
1.2.4修改乙個節點: update()def
update
(self, index, data)
:if self.isempty(
)or index <
0or index >= self.length:
print
'error: out of index'
return
j =0 node = self.head
while node._next and j < index:
node = node._next
j +=
1if j == index:
node.data = data
1.2.5查詢乙個節點: getitem()def
getitem
(self, index)
:if self.isempty(
)or index <
0or index >= self.length:
print
"error: out of index"
return
j =0 node = self.head
while node._next and j < index:
node = node._next
j +=
1return node.data
1.2.6查詢乙個節點的索引: getindex()def
getindex
(self, data)
: j =
0if self.isempty():
print
"this chain table is empty"
return
node = self.head
while node:
if node.data == data:
return j
node = node._next
j +=
1if j == self.length:
print
"%s not found"
%str
(data)
return
1.2.7按索引插入乙個節點: insert()def
insert
(self, index, dataornode)
:if self.isempty():
print
"this chain tabale is empty"
return
if index <
0or index >= self.length:
print
"error: out of index"
return
item =
none
ifisinstance
(dataornode, node)
: item = dataornode
else
: item = node(dataornode)
if index ==0:
item._next = self.head
self.head = item
self.length +=
1return
j =0 node = self.head
prev = self.head
while node._next and j < index:
prev = node
node = node._next
j +=
1if j == index:
item._next = node
prev._next = item
self.length +=
1
1.2.8 清空鍊錶: clear()def
clear
(self)
: self.head =
none
self.length =
0
2.1鍊錶
鍊錶(linked list)是一種常見的基礎資料結構,是一種線性表,但是並不會按線性的順序儲存資料,而是在每乙個節點裡存到下乙個節點的指標(pointer)。由於不必須按順序儲存,鍊錶在插入的時候可以達到o(1)的複雜度,比另一種線性表順序表(陣列)快得多,但是查詢乙個節點或者訪問特定編號的節點則需要o(n)的時間,而順序表相應的時間複雜度分別是o(logn)和o(1)。
2.2 class ***(object):
python程式類的寫法中有的直接在class後加個名稱,有的卻在識別符號後加乙個括號,裡面再加乙個object,這是什麼意思呢?
object是繼承
的意思,物件導向語言中都有這樣一種特性。繼承,指乙個物件直接使用另一物件的屬性和方法。
繼承了object物件,擁有了好多可操作物件,這些都是類中的高階特性。
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'name']
2.3 not enough arguments for format string
not enough arguments for format string
出現這類問題,主要是字串中包含了%號,python 認為它是轉移符,而實際我們需要的就是%, 這個時候,可以使用%%來表示
python基於pickle模組序列化例項(七)
usr bin env python3 coding utf 8 序列化 把變數從記憶體中變成可儲存或傳輸的過程,在python中,序列化叫pickling,在其他語言中也被稱之為serialization,marshalling,flattening等等,都是乙個意思。importpickle d...
基於MQTT的訊息發布訂閱python實現
mqtt 全稱為 message queuing telemetry transport 訊息佇列遙測傳輸 是一種基於發布 訂閱正規化的 輕量級 訊息協議。該協議構建於tcp ip協議上。mqtt協議是輕量 簡單 開放和易於實現的,這些特點使它適用範圍非常廣泛。在很多情況下,包括受限的環境中,如 機...
基於Redis的BloomFilter實戰
離線資料處理與實時資料處理有很大的不同,其中乙個例子就是去重。在聚資料中,訪問uv和購買uv都需要實時的去重。離線處理的時候,我們可以通過count groupby 或者count distinct 等方式比較容易的計算出uv,而且不用太擔心效能,大不了就是多一點map或者執行時間久一點。那麼在實時...