|  Startsida |  Hårdvara |  Nätverk |  Programmering |  Programvara |  Felsökning |  System |   
Programmering
  • C /C + + -programmering
  • Computer Programspråk
  • Delphi Programmering
  • Java Programming
  • JavaScript programmering
  • PHP /MySQL Programmering
  • perl Programmering
  • python Programming
  • Ruby programmering
  • Visual Basics Programmering
  • * Dator Kunskap >> Programmering >> python Programming >> Content

    Hur kan jag effektivt implementera en cirkulär array i Python?

    Python har inte en inbyggd cirkulär matrisdatastruktur. Du kan emellertid effektivt implementera en med en standard Python -lista och Modulo -operatören (`%`). Här är två tillvägagångssätt:

    Metod 1:Använda en lista och Modulo -operatör

    Denna metod är den mest enkla och i allmänhet den mest effektiva. Den använder Modulo -operatören för att svepa runt matrisindexen.

    `` `python

    Klass CircularArray:

    def __init __ (själv, kapacitet):

    self.kapacitet =kapacitet

    self.array =[ingen] * kapacitet

    själv.head =0

    Självstorlek =0

    def is_empty (self):

    returnera self.size ==0

    def is_full (self):

    returnera self.size ==self.kapacitet

    def enqueue (själv, artikel):

    om self.is_full ():

    höja indexError ("Circular Array är full")

    self.array [(self.head + self.size) % self.kapacitet] =objekt

    Självstorlek +=1

    def dequeue (self):

    om self.is_empty ():

    höja indexError ("Circular Array är tom")

    artikel =self.array [self.head]

    self.head =(self.head + 1) % self.kapacitet

    Självstorlek -=1

    returobjekt

    def peek (själv):

    om self.is_empty ():

    höja indexError ("Circular Array är tom")

    returnera self.array [self.head]

    def __len __ (själv):

    returnera självstorlek

    def __str __ (själv):

    return str (self.array)

    #Exempelanvändning

    Circular_Array =CircularArray (5)

    Circular_Array.enqueue (10)

    Circular_Array.enqueue (20)

    Circular_Array.enqueue (30)

    utskrift (circular_array) # utgång:[10, 20, 30, ingen, ingen]

    tryck (circular_array.dequeue ()) # utgång:10

    utskrift (circular_array) # utgång:[ingen, 20, 30, ingen, ingen]

    Circular_Array.enqueue (40)

    Circular_Array.Enqueue (50)

    utskrift (circular_array) # utgång:[ingen, 20, 30, 40, 50]

    utskrift (circular_array.is_full ()) # utgång:true

    `` `

    Metod 2:Använda `collections.deque` (för enklare implementering men potentiellt mindre effektiv för stora matriser)

    Pythons "Collections.deque" ger en dubbel-slutkö, som kan användas för att efterlikna en cirkulär matris. Det är enklare att implementera men kan vara mindre effektiv för mycket stora matriser jämfört med den direkta listbaserade metoden på grund av omkostnader.

    `` `python

    från samlingar import deque

    Klass CircularArraydeque:

    def __init __ (själv, kapacitet):

    self.kapacitet =kapacitet

    self.array =deque (maxlen =kapacitet)

    def is_empty (self):

    return len (self.array) ==0

    def is_full (self):

    return len (self.array) ==self.kapacitet

    def enqueue (själv, artikel):

    om self.is_full ():

    höja indexError ("Circular Array är full")

    self.array.append (artikel)

    def dequeue (self):

    om self.is_empty ():

    höja indexError ("Circular Array är tom")

    returnera self.array.popleft ()

    def peek (själv):

    om self.is_empty ():

    höja indexError ("Circular Array är tom")

    returnera self.array [0]

    def __len __ (själv):

    return len (self.array)

    def __str __ (själv):

    return Str (lista (self.array))

    #Exempelanvändning (samma som ovan, ersätt bara CircularArray med CircularArrayDeque)

    `` `

    Vilken metod att välja?

    För de flesta fall metod 1 (med en lista och modulooperatör) rekommenderas på grund av dess generellt bättre prestanda, särskilt för större matriser. `Collections.deque` är ett bra alternativ om enkelhet och läsbarhet prioriteras framför råprestanda, och matrisstorleken förväntas inte vara extremt stor. Om du arbetar med verkligt massiva matriser kan du överväga att använda Numpy -matriser för ytterligare prestandaförsvinster, även om det lägger till en annan komplexitetsnivå.

    Tidigare:

    nästa:
    relaterade artiklar
    ·Hur fungerar mpc 1000 med fruktiga loops 9?
    ·Vad är PYC filer
    ·Python Tricks
    ·Funktioner på Python
    ·Hur man gör en iterativ Program i Python
    ·Lägga till varje element i en lista i Python
    ·Hur man driver ett Python-skript i Windows
    ·Hur man använder Python ordbok för Looping
    ·Hur man installerar Selenium WebDriver i Python 3 [enkl…
    ·Hur får man storleken på en fil på Python
    Utvalda artiklarna
    ·Vad är fallprogramsats datatyper
    ·Hur förhindra samtidig tillgång till en metod i Java
    ·Visar ett meddelande i C + +
    ·Hur aktiverar jag en JavaScript mycket lättare
    ·Hur du returnerar en pekare till en Vector
    ·Hur inkludera externa JS i Javascript
    ·Grunderna i Visual Basic
    ·Hur man använder Vb.Net in HTML Dynamisk
    ·VBA Handledning för Word
    ·Hur man tar bort en Space Från en variabel i Javascrip…
    Copyright © Dator Kunskap https://www.dator.xyz