数据结构

数据结构

内置数据结构

  • 字典{} 结构: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, '小王')
'''
posted @ 2021-06-03 17:25  刘家小仙女  阅读(42)  评论(0编辑  收藏  举报