2016-09-05 5 views
2

Ich möchte eine Liste in Python einer festen Größe erstellen, lassen Sie uns so 3 zu beginnen. Ich habe eine Methode, die jedes Mal, wenn die Methode aufgerufen wird, Daten in diese Liste schreibt. Ich möchte sie der Liste hinzufügen, bis die Liste voll ist. Sobald die Liste voll ist, sollte sie die Daten in der Liste in aufsteigender Reihenfolge überschreiben (z beginnend mit Element 0). Ich möchte auch eine Funktion hinzufügen, die die Länge des Arrays erhöhen wird, d. H. Wenn die Methode aufgerufen wird, wird das Array von Größe 3 auf Größe 4 erhöht. Wie gehe ich vor?Python Überschreiben und Größenanpassung Liste

+2

Haben Sie schon einmal gesucht oder probiert? Kennen Sie 'collections.deque()'? – Kasramvd

+0

Ich habe versucht, nur die letzten 3 Elemente in der Liste anzuzeigen, d. H. List [-3:], aber das passt nicht zum vorliegenden Problem. –

+2

Das ist eigentlich eine sehr schöne Übung für dich. Also, versuch es zuerst selbst. Sehen Sie sich einfach an, welche Eigenschaften und Methodenlisten Sie haben und wie Sie eingestellt sind. –

Antwort

2

sollte diese einfache Lösung tun:

def add(l, item, max_len): 
    l.insert(0, item) 
    return l[:max_len] 

l = ["banana", "peanut", "bicycle", "window"] 
l = add(l, "monkey", 3) 

print(newlist) 

druckt:

> ['monkey', 'banana', 'peanut'] 

Die in der Liste (l), das Element bearbeiten von hinzufügen und die maximale Größe (max_len) Die Liste sind Argumente.

Das Objekt wird dann zum Index 0 hinzugefügt, während die Liste auf max_len beschränkt ist.

2

Dies sollte den Trick tun. Es gibt Unmengen von vorgefertigten Modulen mit ähnlicher Funktionalität, aber ich dachte, es wäre das Beste, wenn Sie den Prozess visualisieren könnten!

class SizedList(list): 
    def __init__(self, size): 
     list().__init__(self) 
     self.__size = size 
     self.__wrap_location = 0 
     self.len = len(self) 

    def append(self, *args, **kwargs): 
     self.len = len(self) 
     if self.len >= self.__size: 
      if self.__wrap_location == self.__size-1: 
       self.__wrap_location = 0 
      self.__wrap_location += 1 
      self.pop(self.__wrap_location) 
      return self.insert(self.__wrap_location-1, *args) 
     return list.append(self, *args, **kwargs) 

    def increase_size(self, amount=1): 
     self.__size += 1 
0

Hier ist, wie ich am Ende ging. Ich habe eine Variable namens Länge_Liste gesetzt, die ursprünglich auf 3 gesetzt wurde.

def add_to_list(): 

    if len(list) < length_list: 
     append 
    else: 
     del list[0] 
    self.add_to_list() 

def increase_length(): 
    length_list += 1