数据结构
数据结构
内置数据结构
- 字典{} 结构:key-value通过key找value
- 列表[] 结构:通过index取值非常快
- 元组()
- 集合
- 字符串
不是python内的数据结构
- Queue队列:先进先出 FIFO (FIRST IN FIRST OUT )
- Stack 栈:后进先出:LIFO (Last In First Out)
继承关系完成代码的简化
class Foo(object):
def __init__(self):
self.l=[]
def put(self,item): #存数据
self.l.append(item)
class Queue(Foo): # 队列:先进先出
def get(self): #取数据
return self.l.pop(0)
class Stack(Foo): #后进先出
def get(self): #取数据
return self.l.pop()
q=Queue()
q.put(1)
q.put(2)
q.put(3)
print(q.get())
print(q.get())
s=Stack()
s.put(1)
s.put(2)
s.put(3)
print(s.get())
print(s.get())
自定义pickle,借助pickle模块完成简化的dump和load
class Foo(object):
def __init__(self):
self.l=[]
def put(self,item): #存数据
self.l.append(item)
class Queue(Foo): # 队列:先进先出
def get(self): #取数据
return self.l.pop(0)
class Stack(Foo): #后进先出
def get(self): #取数据
return self.l.pop()
import pickle
class Mypickle(object):
def __init__(self,pickle_file):
self.pickle_file=pickle_file
def dump(self,obj):
with open(self.pickle_file,'ab')as f1:
pickle.dump(obj,f1)
def load(self):
with open(self.pickle_file,'rb')as f2:
while True:
try:
yield pickle.load(f2)
except EOFError:
break
q=Queue()
q.put(1)
q.put(2)
q.put(3)
# print(q.get())
# print(q.get())
s=Stack()
s.put('aaa')
s.put(2)
s.put(3)
# print(s.get())
# print(s.get())
mypickle=Mypickle('pickle_file')
mypickle.dump(s)
mypickle.dump(q)
for i in mypickle.load():
print(i.l)
得:
['aaa', 2, 3]
[1, 2, 3]
内置队列得使用
队列queue
-
queue:线程之间数据安全的容器队列
-
Queue 先进先出
import queue q=queue.Queue(4) #fifo 先进先出的队列 4:设置列表长度为4,只能放4个数 q.put(1) #放入 print(q.get()) #取出 try: q.get_nowait() #q.get_nowait()当queue为空时不会阻塞直接报错queue.Empty,可以进行异常处理,为空时直接退出 except queue.Empty:pass
-
LifoQueue 后进先出
- 用途:三级菜单
import queue q=queue.LifoQueue() #后进先出 #栈 q.put(1) q.put(2) q.put(3) print(q.get()) print(q.get()) print(q.get()) 得: 3 2 1
-
PriorityQueue 优先级
- 用途:会员优先
import queue
q=queue.PriorityQueue()
q.put((3,'小王'))
q.put((1,'小李'))
q.put((2,'小张'))
print(q.get())
print(q.get())
print(q.get())
'''
(1, '小李')
(2, '小张')
(3, '小王')
'''