最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中順序表原理與實(shí)現(xiàn)方法詳解

 更新時(shí)間:2019年12月03日 09:14:55   作者:xlengji  
這篇文章主要介紹了Python中順序表原理與實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Python順序表的概念、原理及增刪查等相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下

本文實(shí)例講述了Python中順序表原理與實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:

Python中的順序表

Python中的list和tuple兩種類型采用了順序表的實(shí)現(xiàn)技術(shù),具有順序表的所有性質(zhì)。

tuple是不可變類型,即不變的順序表,因此不支持改變其內(nèi)部狀態(tài)的任何操作,而其他方面,則與list的性質(zhì)類似。

list的基本實(shí)現(xiàn)技術(shù)

Python標(biāo)準(zhǔn)類型list就是一種元素個(gè)數(shù)可變的線性表,可以加入和刪除元素,并在各種操作中維持已有元素的順序(即保序),而且還具有以下行為特征:

  • 基于下標(biāo)(位置)的高效元素訪問和更新,時(shí)間復(fù)雜度應(yīng)該是O(1);

    為滿足該特征,應(yīng)該采用順序表技術(shù),表中元素保存在一塊連續(xù)的存儲(chǔ)區(qū)中。

  • 允許任意加入元素,而且在不斷加入元素的過程中,表對(duì)象的標(biāo)識(shí)(函數(shù)id得到的值)不變。

    為滿足該特征,就必須能更換元素存儲(chǔ)區(qū),并且為保證更換存儲(chǔ)區(qū)時(shí)list對(duì)象的標(biāo)識(shí)id不變,只能采用分離式實(shí)現(xiàn)技術(shù)。

在Python的官方實(shí)現(xiàn)中,list就是一種采用分離式技術(shù)實(shí)現(xiàn)的動(dòng)態(tài)順序表。這就是為什么用list.append(x) (或 list.insert(len(list), x),即尾部插入)比在指定位置插入元素效率高的原因。

《數(shù)據(jù)結(jié)構(gòu)與算法 Python語(yǔ)言描述》 裘宗燕 著

在Python的官方實(shí)現(xiàn)中,list實(shí)現(xiàn)采用了如下的策略:在建立空表(或者很小的表)時(shí),系統(tǒng)分配一塊能容納8個(gè)元素的存儲(chǔ)區(qū);在執(zhí)行插入操作(insert或append)時(shí),如果元素存儲(chǔ)區(qū)滿就換一塊4倍大的存儲(chǔ)區(qū)。但如果此時(shí)的表已經(jīng)很大(目前的閥值為50000),則改變策略,采用加一倍的方法。引入這種改變策略的方式,是為了避免出現(xiàn)過多空閑的存儲(chǔ)位置。

在Python的官方實(shí)現(xiàn)中,list實(shí)現(xiàn)采用了如下的策略:

  /* This over-allocates proportional to the list size, making room
   * for additional growth. The over-allocation is mild, but is
   * enough to give linear-time amortized behavior over a long
   * sequence of appends() in the presence of a poorly-performing
   * system realloc().
   * The growth pattern is: 0, 4, 8, 16, 25, 35, 46, 58, 72, 88, ...
   */
  new_allocated = (newsize >> 3) + (newsize < 9 ? 3 : 6);
  /* check for integer overflow */
  if (new_allocated > PY_SIZE_MAX - newsize) {
    PyErr_NoMemory();
    return -1;
  } else {
    new_allocated += newsize;
  }

python順序表增刪查實(shí)現(xiàn)

class shunxubiao:
  def __init__(self,length):#length表示順序表的長(zhǎng)度,決定此順序表最多存儲(chǔ)多少元素
    self.length=length
    self.data=[] #data表示順序表內(nèi)容
    self.biao=-1 #元素下標(biāo)
  def weikong(self):#判斷 這個(gè)順序表是否是空的
    if self.biao==-1:
      return True
    else:
      return False
  def mande(self):#判斷此順序表是否是滿的
    if self.biao+1==self.length:
      return True
    else:
      return False
  def qingkong(self):
    if not self.weikong():
      self.data=[]
      self.biao=-1
  def geshu(self):
    return self.biao+1
  def chazhao(self,x):#知道下標(biāo)查找元素
    return self.data[x]
  def chazhao1(self,x):#知道元素查找下標(biāo)
    if self.weikong():
      print('表為空')
      return -1
    for i in range(self.biao+1):
      if self.data[i]==x:
       return i
       break
       print('查找的元素不存在')
  def biaoweijia(self,x): #給順序表表尾加一個(gè)元素
    if self.mande():
      print('biaoyiman')
    else:
     self.data.append(x)
    self.biao+=1
  def charu(self,index,x):#想順序表的index位置插入x元素
    if self.mande():
      print('biayiman')
    elif index<0 or index>self.biao-1:
      print('bunengcharu')
    else:
      for i in range(self.biao,index-1):
        self.data[i+1]=self.data[i]
        self.data[index-1]=x
      self.biao+=1
  def shanchu(self,x):#刪除指定元素x
    if self.weikong():#判斷是不是空表
      print('kongde,bunengshanchu')
    index=-1#用index來找x的位置
    for i in (self.data):
      index+=1
      if i == x:
        break
    for i in range(index,self.biao-1):#把x元素之后的元素都向前推進(jìn)一格
      self.data[i]=self.data[i+1]
    self.biao-=1
c=shunxubiao(6)
c.data=[2,4,5,6]
c.biao=3
c.weikong()
print(c.chazhao(2))#知道尾標(biāo)2查找元素
print(c.chazhao1(4))#知道元素查找尾標(biāo)
c.biaoweijia(7)#給表尾加元素
print(c.data)
print(c.biao)
c.charu(3,9)
print(c.data)
print(c.biao)
c.shanchu(7)
print(c.data)
print(c.biao)

輸出結(jié)果:

[2, 4, 5, 6, 7] 4 [2, 4, 5, 6, 7] 5 [2, 4, 5, 6, 7] 4

思考:為什么沒有把9添加進(jìn)去,也沒有把7刪除掉

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python加密解密算法與技巧總結(jié)》、《Python編碼操作技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Python實(shí)現(xiàn)識(shí)別文字中的省市區(qū)并繪圖

    Python實(shí)現(xiàn)識(shí)別文字中的省市區(qū)并繪圖

    在做NLP(自然語(yǔ)言處理)相關(guān)任務(wù)時(shí),經(jīng)常會(huì)遇到需要識(shí)別并提取省、城市、行政區(qū)的需求。今天給大家介紹一個(gè)模塊,你只需要把字符串傳遞給這個(gè)模塊,他就能給你返回這個(gè)字符串內(nèi)的省、市、區(qū)關(guān)鍵詞,快來學(xué)習(xí)一下吧
    2022-06-06
  • Python中用戶輸入與while循環(huán)詳情

    Python中用戶輸入與while循環(huán)詳情

    這篇文章主要介紹了Python中用戶輸入與while循環(huán)詳情,,包括如何接收用戶輸入并進(jìn)行處理,在程序滿足一定的條件時(shí)讓程序一直運(yùn)行,通過獲取用戶輸入并學(xué)會(huì)控制程序在用戶想要結(jié)束時(shí)退出循環(huán),即可編寫出交互式程序,下文詳細(xì)內(nèi)容介紹,需要的朋友可以參考一下
    2022-03-03
  • Python制作當(dāng)年第一款手機(jī)游戲-貪吃蛇游戲(練習(xí))

    Python制作當(dāng)年第一款手機(jī)游戲-貪吃蛇游戲(練習(xí))

    這篇文章主要介紹了Python制作當(dāng)年第一款手機(jī)游戲-貪吃蛇游戲,文章利用Python?pygame做一個(gè)貪吃蛇的小游戲而且講清楚每一段代碼是用來干嘛的,需要的朋友可以參考一下
    2022-01-01
  • python執(zhí)行外部程序的常用方法小結(jié)

    python執(zhí)行外部程序的常用方法小結(jié)

    這篇文章主要介紹了python執(zhí)行外部程序的常用方法,實(shí)例總結(jié)了Python使用os模塊及commands模塊執(zhí)行外部程序的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-03-03
  • Python的SQLalchemy模塊連接與操作MySQL的基礎(chǔ)示例

    Python的SQLalchemy模塊連接與操作MySQL的基礎(chǔ)示例

    SQLalchemy是Python世界中驅(qū)動(dòng)MySQL的一款高人氣模塊,這里我們從入門開始來看一下Python的SQLalchemy模塊連接與操作MySQL的基礎(chǔ)示例:
    2016-07-07
  • np.meshgrid中的indexing參數(shù)問題解決

    np.meshgrid中的indexing參數(shù)問題解決

    本文主要介紹了np.meshgrid中的indexing參數(shù)問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • python網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)

    python網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)

    實(shí)踐來源于理論,做爬蟲前肯定要先了解相關(guān)的規(guī)則和原理,網(wǎng)絡(luò)爬蟲又稱為網(wǎng)頁(yè)蜘蛛,網(wǎng)絡(luò)機(jī)器人,更經(jīng)常的稱為網(wǎng)頁(yè)追逐者,是一種按照一定的規(guī)則,自動(dòng)地抓取萬維網(wǎng)信息的程序或者腳本。一句話概括就是網(wǎng)上信息搬運(yùn)工。本篇文章帶你深入了解,需要的朋友可以參考下
    2021-09-09
  • Python雙向鏈表插入節(jié)點(diǎn)方式

    Python雙向鏈表插入節(jié)點(diǎn)方式

    這篇文章主要介紹了Python雙向鏈表插入節(jié)點(diǎn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 使用Python設(shè)置、更改及移除Word文檔密碼

    使用Python設(shè)置、更改及移除Word文檔密碼

    給Word文檔設(shè)置打開密碼是常見的Word文檔加密方式,如果我們需要對(duì)大量的Word文檔進(jìn)行加密、解密處理,Python是一個(gè)不錯(cuò)的選擇,本文將介紹如何使用Python設(shè)置、更改或移除Word文檔的加密,需要的朋友可以參考下
    2024-03-03
  • python怎么對(duì)數(shù)字進(jìn)行過濾

    python怎么對(duì)數(shù)字進(jìn)行過濾

    在本篇內(nèi)容中小編給大家整理的是關(guān)于python怎么對(duì)數(shù)字進(jìn)行過濾的實(shí)例方法內(nèi)容,需要的朋友們可以參考下。
    2020-07-07

最新評(píng)論

昌图县| 长海县| 敖汉旗| 大理市| 寿宁县| 怀化市| 海原县| 乡宁县| 嘉兴市| 宁乡县| 南宁市| 曲麻莱县| 常山县| 西林县| 万州区| 石阡县| 万年县| 宁国市| 台中县| 碌曲县| 江华| 体育| 乌鲁木齐县| 宿州市| 巩留县| 瑞丽市| 抚顺市| 石门县| 定远县| 江津市| 沧源| 周口市| 苏尼特左旗| 济阳县| 宁明县| 莫力| 浙江省| 额敏县| 绥化市| 平顶山市| 宁夏|