Programação  
 
Rede de conhecimento computador >> Programação >> Programação Python >> Content
Como posso implementar com eficiência uma matriz circular no Python?
O Python não possui uma estrutura de dados de matriz circular embutida. No entanto, você pode implementar com eficiência um usando uma lista de Python padrão e o operador Modulo (`%`). Aqui estão duas abordagens:

Método 1:Usando uma lista e operador de módulo

Este método é o mais direto e geralmente o mais eficiente. Ele usa o operador Modulo para envolver os índices da matriz.

`` `Python
Classe CircularRay:
def __init __ (auto, capacidade):
self.capacity =Capacidade
self.array =[Nenhum] * capacidade
self.head =0
self.size =0

def is_empty (self):
retornar self.size ==0

def is_full (self):
return self.size ==self.capacidade

Def Enqueue (self, item):
se self.is_full ():
Raise IndexError ("Array circular está cheio")
self.array [(self.head + self.size) % self.capacity] =item
self.size +=1

def dequeue (self):
se self.is_empty ():
Raise IndexError ("Array circular está vazio")
item =self.array [self.head]
self.head =(self.head + 1) % self.capacidade
self.size -=1
Item de retorno

Def Peek (self):
se self.is_empty ():
Raise IndexError ("Array circular está vazio")
retornar self.array [self.head]

def __len __ (self):
retornar self.size

def __str __ (self):
retornar str (self.array)

#Exemplo Uso
Circular_array =CircularArray (5)
circular_array.enqueue (10)
circular_array.enqueue (20)
circular_array.enqueue (30)
Imprimir (circular_array) # saída:[10, 20, 30, nenhum, nenhum]
Print (circular_array.dequeue ()) # saída:10
Imprimir (circular_array) # saída:[Nenhum, 20, 30, nenhum, nenhum]
circular_array.enqueue (40)
circular_array.enqueue (50)
Imprimir (circular_array) # saída:[Nenhum, 20, 30, 40, 50]
print (circular_array.is_full ()) # saída:true
`` `

Método 2:Usando `coleta.deque` (para uma implementação mais simples, mas potencialmente menos eficiente para grandes matrizes)

O `Coleções.deque 'do Python fornece uma fila de ponta dupla, que pode ser usada para imitar uma matriz circular. É mais simples de implementar, mas pode ser menos eficiente para matrizes muito grandes em comparação com a abordagem direta baseada na lista devido à sobrecarga.

`` `Python
De coleções importantes deque

Classe CircularArrayDeque:
def __init __ (auto, capacidade):
self.capacity =Capacidade
self.array =deque (maxlen =capacidade)

def is_empty (self):
retornar Len (self.array) ==0

def is_full (self):
retornar Len (self.array) ==self.capacidade

Def Enqueue (self, item):
se self.is_full ():
Raise IndexError ("Array circular está cheio")
self.array.append (item)

def dequeue (self):
se self.is_empty ():
Raise IndexError ("Array circular está vazio")
retornar self.array.popleft ()

Def Peek (self):
se self.is_empty ():
Raise IndexError ("Array circular está vazio")
retornar self.array [0]

def __len __ (self):
Retorne Len (self.array)

def __str __ (self):
Return str (list (self.array))

#Exemplo Uso (o mesmo que acima, apenas substitua o CircularArray por CircularArrayDeque)
`` `

Qual método escolher?

Para a maioria dos casos, Método 1 (usando uma lista e operador de módulo) é recomendado devido ao seu desempenho geralmente melhor, especialmente para matrizes maiores. `Coleções.deque` é uma boa opção se a simplicidade e a legibilidade forem priorizadas em relação ao desempenho bruto, e o tamanho da matriz não for extremamente grande. Se você estiver trabalhando com matrizes verdadeiramente massivas, considere usar matrizes Numpy para obter mais ganhos de desempenho, embora isso acrescente um nível diferente de complexidade.

Anterior :

Próximo :
  Os artigos relacionados
·Lista de Ferramentas Python 
·Como executar o Python com o argumento 
·Tutorial em verificações de corda em Python 
·Como testar uma faixa de IP em Python 
·Como fazer Condicionais em Python 
·Como gráfico com Python 
·Como concatenar listas em Python 
·Como encontrar o mais curto comprimento de uma string e…
·Como executar um script Python em um Mac 
·Como executar um script Python Do Shell 
  Artigos em destaque
·Como posso fazer um jogo de corridas de carros em Flash…
·Onde o PHP pode ser encontrado online? 
·Como criar um servidor proxy em Java 
·Como ativar o JavaScript no Chrome, Microsoft Edge e Sa…
·Comparação de algoritmos de ordenação 
·O que é uma matriz no Visual Basic 
·Quais são os benefícios de um Bot 
·Como remover dados de uma matriz em Python 
·Como escrever um PDF em PHP 
·Como escrever aplicações de banco de dados com C # 
Cop e direita © Rede de conhecimento computador https://ptcomputador.com Todos os Direitos Reservados