1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 详解Python的collections模块中的deque双端队列结构

详解Python的collections模块中的deque双端队列结构

时间:2020-07-15 06:21:14

相关推荐

详解Python的collections模块中的deque双端队列结构

后端开发|Python教程

Python,deque,双端队列,collections

后端开发-Python教程

deque 是 double-ended queue的缩写,类似于 list,不过提供了在两端插入和删除的操作。

易语言手机挂q源码,vscode自定义插件,wubi 装ubuntu,检测tomcat是否启动,python爬虫好难,vim php 语法高亮,企业seo推广怎么做,苹果软件在线下载网站源码,joomla简单模板下载lzw

appendleft 在列表左侧插入

popleft 弹出列表左侧的值

extendleft 在左侧扩展

学校网站php源码,vscode实现idea,ubuntu树状图目录结构,tomcat 部署过程,跨进程访问sqlite,小京东商家入驻插件,web前端哪些框架好,欧盟数据爬虫案例,php 文件被加密,北京seo公司seo公司,手机网站模板css,网页直播源码,html个人模板源码下载,表单页面源码,停车场管理系统源码,小程序到店自提源码lzw

例如:

代挂api代理源码,vscode连接sql,urfi ubuntu,tomcat配置流程,sqlite数据库启动,查看付费内容插件,前端三大框架,爬虫被识别为安卓,开源php cms系统,湖州正规seo优化,租人网站源码,网页跳出骑士cms人才系统登录,邮件服务器模板lzw

queue = deque()# append values to wait for processingqueue.appendleft("first")queue.appendleft("second")queue.appendleft("third")# pop values when readyprocess(queue.pop()) # would process "first"# add values while processingqueue.appendleft("fourth")# what does the queue look like now?queue # deque([fourth, hird, second])

作为一个双端队列,deque还提供了一些其他的好用方法,比如 rotate 等,下面我们一起来看一下:

填充

deque可以从任意一端填充,在python实现称为“左端”和“右端”。

import collectionsd1 = collections.deque()d1.extend(abcdefg)print extend:, d1d1.append(h)print append:, d1d2 = collections.deque()d2.extendleft(xrange(6))print extendleft, d2d2.appendleft(6)print appendleft, d2

extendleft()迭代处理其输入,对每个元素完成与appendleft()相同的处理。

extend: deque([a, , c, d, e, f, g])append: deque([a, , c, d, e, f, g, h])extendleft deque([5, 4, 3, 2, 1, 0])appendleft deque([6, 5, 4, 3, 2, 1, 0])

利用

可以从两端利用deque元素,取决于应用的算法。

import collectionsprint "From the right:"d = collections.deque(abcdefg)while True: try: print d.pop(), except IndexError: breakprintprint "\nFrom the left:"d = collections.deque(xrange(6))while True: try: print d.popleft(), except IndexError: breakprint

使用pop()可以从deque右端删除一个元素,使用popleft()可以从deque左端删除一个元素。

From the right:g f e d c b aFrom the left:0 1 2 3 4 5

由于双端队列是线程安全的,可以在不同的线程中同时从两端利用队列的内容。

import collectionsimport threadingimport timecandle = collections.deque(xrange(5))def burn(direction, nextSource): while True: try: next = nextSource() except IndexError: break else: print \%8s: %s % (direction, next) time.sleep(0.1) print \%8s done % direction returnleft = threading.Thread(target=burn, args=(Left, candle.popleft))right = threading.Thread(target=burn, args=(Right, candle.pop))left.start()right.start()left.join()right.join()

线程交替处理两端,删除元素,知道这个deque为空。

Left: 0 Right: 4 Right: 3 Left: 1 Right: 2 Left done Right done

旋转

deque另外一个作用可以按照任意一个方向旋转,而跳过一些元素。

import collectionsd = collections.deque(xrange(10))print Normal:, dd= collections.deque(xrange(10))d.rotate(2)print Right roration:, dd = collections.deque(xrange(10))d.rotate(-2)print Left roration:, d

结果:

Normal: deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])Right roration: deque([8, 9, 0, 1, 2, 3, 4, 5, 6, 7])Left roration: deque([2, 3, 4, 5, 6, 7, 8, 9, 0, 1])

再举个例子:

# -*- coding: utf-8 -*-"""下面这个是一个有趣的例子,主要使用了deque的rotate方法来实现了一个无限循环的加载动画"""import sysimport timefrom collections import dequefancy_loading = deque(>--------------------)while True: print \ %s % \.join(fancy_loading), fancy_loading.rotate(1) sys.stdout.flush() time.sleep(0.08)

输出结果:

# 一个无尽循环的跑马灯 ------------->-------

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。