1. 程式人生 > >Python Tricks(七)—— 使用 list 模擬先入先出的佇列(FIFOQueue)

Python Tricks(七)—— 使用 list 模擬先入先出的佇列(FIFOQueue)

我們知道 list 頭部受限,天然地適合做 Stack,即尾部入,尾部出,我們又知道 list 刪除頭部的元素是極為低效的,是不是就完全沒有辦法了呢?只需增加一個指向頭部的指標即可。

class FIFOQueue:
    def __init__(self):
        self.A = []
        self.head = 0
    def __len__(self):
        return len(self.A[self.head:])
    def append(self, item):
        self.A.append(item)
    def
extend(self, item):
self.A.extend(item) def pop(self): e = self.A[self.head] self.head += 1 if self.head > 5 and self.head > len(self.A) / 2: self.A = self.A[self.head:] self.head = 0 # 截斷,避免儲存空間的浪費 return e def
__contains__(self, item):
return item in self.A[self.head:]

相關推薦

Python Tricks—— 使用 list 模擬佇列FIFOQueue

我們知道 list 頭部受限,天然地適合做 Stack,即尾部入,尾部出,我們又知道 list 刪除頭部的元素是極為低效的,是不是就完全沒有辦法了呢?只需增加一個指向頭部的指標即可。 class FI

python學習——讀取染色體長度:for循環對染色體序列進行反向互補

導入模塊 int 終端 染色體 文件名 循環 open sys.argv pan 對fasta文件genome_test.fa中的染色體序列進行反向互補,並輸出到文件genome_test_RC.fa genome_test.fa >chr1ATATATATAT&

分支界限法 | 裝載問題佇列式分支限界法

    輸入要求 有多組資料。每組資料包含2行。第一行包含2個整數 C(1 <= C <= 1000)、和 n(1 <= n <= 10),分別表示的輪船的載重量和集裝箱的個數。第二行包含n個整數,依次表示

分支界限法 | 裝載問題隊列式分支限界法

typedef 和集 \n n) 分享圖片 type amp nap include 輸入要求 有多組數據。每組數據包含2行。第一行包含2個整數 C(1 <= C <= 1000)、和 n(1 <= n <= 10),分別表示的輪

從零開始學USB、端點、管道、介面、配置、裝置

端點(endpoint):端點是USB裝置的唯一可識別部分,其是主機和裝置之間的通訊流的終點。它是一個USB裝置或主機上的一個數據緩衝區,用來存放和傳送USB的各種資料。每個USB邏輯裝置由一組獨立的端點組成。每個邏輯裝置都有一個由系統在裝置連線時分配的唯一地址。裝置上的每個端點在設計時都會得到

C#導Excel

bject gpo tel collect lean type close 表格 excel導入 C#操作Excel導入導出方法一,根據項目要求,對Excel操作有多重方法,有的是類庫自己編程設計格式,有的是JS根據表格的格式樣式直接導出。 現在介紹的是直接下載型: 根據

棧的壓序列劍指offer第21題

一、題目描述 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。 假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的一個彈出序列, 但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這

演算法:設計演算法以找到最大利潤。您可以根據需要完成儘可能多的交易即,多次買入並賣一股股票

假設您有一個數組,其中第i個元素是第i天給定股票的價格。 設計演算法以找到最大利潤。您可以根據需要完成儘可能多的交易(即,多次買入並賣出一股股票)。 注意:您不能同時進行多筆交易(即,您必須在再次購買之前賣出股票)。 例1: 輸入: [7,1,5,3,6,4] 輸出: 7 說明:在第2天

Android 養成記-1 --1.4 動畫系列 選單側滑+圖示旋轉+dialog彈+點選效果

選單側滑動畫 思想是佈局檔案裡,將選單欄跟內容欄放在同一個layout中,但是選單欄初始是隱藏狀態. 總佈局是線性水平佈局: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

前端演算法:設計演算法以找到最大利潤。您可以根據需要完成儘可能多的交易即,多次買入並賣一股股票

假設您有一個數組,其中第i個元素是第i天給定股票的價格。 設計演算法以找到最大利潤。您可以根據需要完成儘可能多的交易(即,多次買入並賣出一股股票)。 注意:您不能同時進行多筆交易(即,您必須在再次購買之前賣出股票)。 例1: 輸入: [7,1,5,3,6,4]

java程式執行順序main方法 靜態 非靜態 以及衍生的部分定義

Java程式執行時,第一件事情就是試圖訪問main方法,因為main相等於程式的入口,如果沒有main方法,程式將無法啟動,main方法更是佔一個獨立的執行緒。 下面是一段程式碼 幫助我們分析class A { public A() { System

java的輸入輸出流與檔案操作2.讀及關流

1.如何讀取檔案。 可以一個位元組一個位元組的讀,也可以使用緩衝,一塊一塊資料的讀。 一般使用第二種,因為比較快。 @Test public void TestRead() throws IOEx

二十二、併發程式設計之使用Condition實現一個的有界佇列

//先入先出佇列 public class MyQueue<E> { private Object[] obj;//陣列(佇列) private int addIndex;//新增角標 private int removeIndex;//移除腳標 private in

(FIFO)的一種SQL語句查詢演算法

在論壇上幾次碰到過類似的於FIFO問題,故共享一個有些"惡搞"的演算法。 在很多情況下,需要對一些記錄,比如出入庫記錄,收付款記錄進行先入先出的匹配。一般來說普通做法是在某個物料出庫的時候通過程式來對比實現。但這種設計對業務要求比較嚴格。比如需要事先制定,退貨,紅衝的處理方式

Python列表list詳解篇

python list 介紹:列表是最常用的python數據類型,它可以作為一個方括號內的逗號用分隔值出現。列表的數據項不需要具有相同的類型。創建一個列表,只要逗號分隔的不同數據項用方括號括起來即可。name=[‘’beijing,’shenzhen’,’nanjing’] 訪問列表的值:(列表的下標

Python 二級模擬操作題

right ali ima 輸出 import 單詞 com true 二級 1. 從鍵盤輸入 3 個數作為三角形的邊長,在屏幕上顯示輸出由這 3 個邊長構成三角形的面積(保留 2 位小數) 代碼: a,b,c = eval(input()) p = (a+b+c

Python 二級模擬選擇題

panda 軟件 數據庫維護 維護 冒泡 鍵值 dom 通過 子程序 1. 在面向對象方法中,一個對象請求另一對象為其服務的方式是通過發送(C)A. 命令B. 口令C. 消息D. 調用語句 2. 下面不屬於軟件需求分析階段主要工作的是(C)A. 需求評審B. 需求獲

Python學習筆記—— List.sort 與二進位制搜尋bisect

程式碼及內容源自《Fluent Python》——Luciano Ramalho 著 List.sort方法會直接進行排序操作,過程中既不會複製原list,也不會生成新的list物件。 與之相反,sorted()函式則會生成並返回一個新的list。

:重建二叉樹依據序遍歷或者後序遍歷和中序遍歷重建二叉樹

off 相同 tree int roo 節點 先序 throw -a 對於一顆二叉樹。能夠依據先序遍歷(或者後序遍歷)和中序遍歷(樹中不含反復的數字)又一次還原出二叉樹。 解析: 1. 先序遍歷序列的第一個元素必然是根節點,能夠由此獲取二叉樹的根節點。 2. 依

python模擬登錄博客園附:問題求教

closed handler ostc display 問題 out int cep webkit 經過分析,博客園登錄時采用了JSEncrypt加密,因此登錄請求時要用密文,涉及字段如下 input1:用戶名對應的密文 input2:密碼對應的密文 登錄請求鏈接https