本文字数:1498 字 阅读本文大概需要:4 分钟 写在之前 在昨天的文章(Python 标准库之 OS)中我们学习了Python 标准库中非常强大的 os,今天我们来见识一下 Python 标准库的双端队列。 双端队列(deque)同时具备栈和队列的特征,栈是先进后出的数据结构,队列是先进先出的数据结构(请先知道这个概念),所以双端队列可以从序列的任何一端添加和删除项。 双端队列(deque) 首先我们先来看一个简单的小问题:如果有一个列表,比如 [1,2,3],让你在最右边增加一个数字。看到这你肯定要说,这也太简单了,不就是 append() 一下嘛。 这个是简单,但能不能在最左边增加一个数字呢?请先思考一下,思考完毕后请接着往下看: >>> l1 = [1,2,3] >>> l1.append(4) >>> l1 [1,2,3,4] >>> n = [7] >>> n.extend(l1) >>> n [7,1,2,3,4] 除了上述方法以外,或许你还有别的办法。但是,追求简洁优雅的 Python 早就替我们想好了,它为我们提供了一个更简单的模块来解决这个问题。 >>>fromcollectionsimportdeque 用上述的这种引用方法是以为 collections 中东西很多,我们这次只用到 deque。 >>> l1 = [1,2,3,4] 这次还是用这个列表,试试分别从右边和左边增加数字。 >>> ql = deque(l1) 上面这个是必须的,将列表转换成 deque 对象。deque 就是翻译过来的双端队列(Double-ended Queue)。 >>> ql.append(5) >>> ql deque([1,2,3,4,5]) >>> ql.appendleft(7) >>> ql deque([7,1,2,3,4,5]) 这样的操作可以说是相当方便了。然后下面让我们继续来看如何删除: >>> ql.pop() 5 >>> ql deque([7,1,2,3,4]) >>> ql.popleft() 7 >>> ql deque([1,2,3,4]) 函数 popleft() 是去掉最左边的项并返回该项,pop() 是去掉最右边的项并返回该项。接下来我们来做一个小题,加深一下印象:判断一下一个词是不是回文。判断回文的话我们都知道,最简单的就是从一个词的两端向中间扫描,只要两端的字符匹配,一直弹出直到到达中间: fromcollectionsimportdeque defpalindrome(word): dq = deque(word) whilelen(dq) >1: ifdq.popleft() != dq.pop(): returnFalse returnTrue 代码基本上就是像上面写的那样,接下来让我们来测试一下: print(palindrome('a')) print(palindrome('rocky')) print(palindrome('')) print(palindrome('radar')) 运行的结果如下所示: True False True True 写在之后 上面的例子把判断回文作为双端队列的一个简单说明,写到这里的话其实整个的 Python 基础基本快要结束了,期间收到很多读者在后台的留言,说能不能找一些题目来做,看完了不用过会儿就忘记了。其实我本来早就有这个打算,但总是忘记了,出题什么的真的是件很麻烦的事,既然很多人说的话,我可能准备在这个系列全部结束以后,拿出一段时间来每天发几道题给大家切一切,这个还是个想法,具体后面再说。 如果你还有什么想法,或者是还有哪些东西你觉得学不会,都可以在后台或者我的微信里告诉我,说不定哪天就写写你不会的地方。最后就是老话,觉得对你有帮助,点个赞再走。 The end。 |
|
来自: 首家i55ryzehof > 《电脑知识》