Datentyp Array in Python

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
FranzKaiser
User
Beiträge: 7
Registriert: Donnerstag 22. November 2007, 13:49

Datentyp Array in Python

Beitragvon FranzKaiser » Donnerstag 22. November 2007, 14:14

Guten Tag,
Da es in Python keinen explizipen Datentyp Array gibt, wollte ich dafür ein Programm schreiben.
Die Idee dahinter ist eine Liste derart zu modifizieren, dass sie genau wie bei Arrays nur für eine bestimmte Länge und einen bestimmten Datentyp zugänglich sein soll.
Nun habe ich folgendes Programm:

Code: Alles auswählen

import types

class Array:
    def __init__(self, size, datatype):
       
        self.size=size
        l=[]
        for s in range(1,size+1):
            s=l.append(None)
        self.size=len(l)
        self.datatype=type(l)
        print len(l)

    def insertElementAT(self, pos, element):
        self.pos=pos
        self.element=element
        if pos <= size-1:
            l.insert(pos,element)
        else:
            print("Error")
           
           
           



       




a = Array(4,int)


Leider gingen mir bei der Methode zum Einfuegen die Ideen aus.
Wie kann ich die Objekte die ich in Init belegt habe auch in meiner neuen Methode verfügbar machen?
Hat jemand vielleicht ein passendes Beispiel wie man den Datentyp Array in Python realisieren kann?
Schon mal danke für Eure Hilfe!
Sollte dieses Problem für euch trivial sein so entschuldige ich mich, ich bin noch nicht lange dabei.

Gruß FranzKaiser ein Python anfänger
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Re: Datentyp Array in Python

Beitragvon CM » Donnerstag 22. November 2007, 14:35

Moin & willkommen im Forum,

FranzKaiser hat geschrieben:Guten Tag,
Da es in Python keinen explizipen Datentyp Array gibt,

Das nicht, aber es gibt ein array-Modul welches zu den Standardmodulen gehört.

Und dann gibt es da noch http://numpy.scipy.org/ für die etwas anspruchsvolleren Unternehmungen. Der Quellcode enthält sicher eine fülle von Anregungen für Dein Projekt. Aber warum das Rad neu erfinden?

Gruß,
Christian
BlackJack

Beitragvon BlackJack » Donnerstag 22. November 2007, 15:43

@FranzKaiser: Wozu brauchst Du denn so ein `Array`? Um den Typ von den Objekten zu beschränken, die man da hinein stecken kann? Das ist relativ "unpythonisch" weil es dem "duck typing" zuwiderläuft.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Donnerstag 22. November 2007, 15:54

Du kannst deine Klasse auch so gestalten, dass sie sich wie eine Sequenz verhaelt, also dass man drueber iterieren kann und mit [i] auf Elemente zugreifen kann (Stichwort: __setitem__, __getitem__, ...). Schau mal hier:
http://docs.python.org/ref/specialnames.html
http://docs.python.org/lib/module-operator.html

Eventuell macht es auch Sinn, von einer Liste zu erben und nur einige Funktionen zu aendern...

Aber wie gesagt wurde, falls das nicht nur zu Uebungszwecken ist, schau dir erstmal an, was es schon an vorhandenen Mittel gibt.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
FranzKaiser
User
Beiträge: 7
Registriert: Donnerstag 22. November 2007, 13:49

Beitragvon FranzKaiser » Donnerstag 22. November 2007, 16:35

BlackJack hat geschrieben:@FranzKaiser: Wozu brauchst Du denn so ein `Array`? Um den Typ von den Objekten zu beschränken, die man da hinein stecken kann? Das ist relativ "unpythonisch" weil es dem "duck typing" zuwiderläuft.


Ich weiß, ich habe hier bereits eine Queue(Schlange) und einen Stack(Kellerspeicher) realisiert jetzt möchte ich sehen wie ich für Python ein Array realisieren kann.

Ich werd mir die Links aus der Doc mal durchlesen
Danke
Ich bin noch etwas Pythonfremd komme eher aus dem Java Bereich^^
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Beitragvon keppla » Donnerstag 22. November 2007, 17:19

Ich bin noch etwas Pythonfremd komme eher aus dem Java Bereich^^

Merkt man. Ein Tipp (ich kam auch von Java): Gib nicht so viel auf typsicherheit. Das mag sich am Anfang "gefährlich" anfühlen, ist aber im endeffekt nichts, was man in python vermisst.
Wenn dir, warum auch immer Typsicherheit absolut wichtig ist, verwende lieber eine Sprache die das bietet.
Ich kann aber sagen, dass Typsicherheit häufig extrem überbewertet ist

http://www.mindview.net/WebLog/log-0052 Keine Ahnung, obs der Text ist, an den ich mich erinnere, aber Bruce Eckel hat da ganz interessante Sachen zu geschreiben.
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Beitragvon mitsuhiko » Donnerstag 22. November 2007, 17:20

FranzKaiser hat geschrieben:Ich bin noch etwas Pythonfremd komme eher aus dem Java Bereich^^

Ja. Das merkt man :-)
TUFKAB – the user formerly known as blackbird
EyDu
User
Beiträge: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Donnerstag 22. November 2007, 17:33

FranzKaiser hat geschrieben:Ich weiß, ich habe hier bereits eine Queue(Schlange) und einen Stack(Kellerspeicher) realisiert jetzt möchte ich sehen wie ich für Python ein Array realisieren kann.


:D

Code: Alles auswählen

class StackListBase(list):
    def push(self, elem):
        self.append(elem)

class Stack(StackListBase):
    def pop(self):
        return list.pop(self, -1)

class Queue(StackListBase):
    def pop(self):
        return list.pop(self, 0)

Man kann es natürlich noch allgemeiner machen..
BlackJack

Beitragvon BlackJack » Donnerstag 22. November 2007, 17:55

@FranzKaiser: Was ist Dir denn an einer Liste nicht "Array" genug? Listen bieten doch auch ein "Array-Interface". Listen mit einer bestimmten Grösse sind mit ``*`` oder einer "list comprehension" schnell erzeugt, man kann per Index auf die Elemente zugreifen und die Länge abfragen. Ich sehe da keinen Grund unbedingt eine Klasse für zu schreiben.

Da Du von Java kommst: Die Implementierung von Python's Listen entspricht ungefähr einer `java.util.ArrayList`.
FranzKaiser
User
Beiträge: 7
Registriert: Donnerstag 22. November 2007, 13:49

Beitragvon FranzKaiser » Donnerstag 22. November 2007, 18:20

BlackJack hat geschrieben:@FranzKaiser: Was ist Dir denn an einer Liste nicht "Array" genug? Listen bieten doch auch ein "Array-Interface". Listen mit einer bestimmten Grösse sind mit ``*`` oder einer "list comprehension" schnell erzeugt, man kann per Index auf die Elemente zugreifen und die Länge abfragen. Ich sehe da keinen Grund unbedingt eine Klasse für zu schreiben.

Da Du von Java kommst: Die Implementierung von Python's Listen entspricht ungefähr einer `java.util.ArrayList`.

Jip hab ich mir gedacht
Ich weiß auch das es in python überflüssig ist aber wissen wie es möglich ist möcht ichs trotzdem.
Man schreibt ja auch ne Ki für ein TicTacToe nur um zu zeigen das man es eben machen kann (oder brauch die Menschheit noch mehr Ki für TicTacToe?^^)

Edit: Sagtmal heißt es nicht Python: "Pseudocode that actually runs!"
Ich hab u.A. in C/C++/VB/JAVA(inkl. EE-Entwicklung) und Ocaml programmiert aber nichts fiel mir so schwer zu lernen wie Python

Gruß fK
Zuletzt geändert von FranzKaiser am Donnerstag 22. November 2007, 20:08, insgesamt 1-mal geändert.
EyDu
User
Beiträge: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Donnerstag 22. November 2007, 18:25

Als Basisklasse würde ich ein Dictionary verwenden (schneller Zugriff und man bekommt auch gleich eine Meldung, falls ein Feld nicht initialisiert ist). Dann solltest du vielleicht noch die Methoden "__getitem__" und "__setitem__" kennen, so wie die Funktion "isinstance". Damit sollte sich alles machen lassen.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 23. November 2007, 14:56

FranzKaiser hat geschrieben:Edit: Sagtmal heißt es nicht Python: "Pseudocode that actually runs!"
Ich hab u.A. in C/C++/VB/JAVA(inkl. EE-Entwicklung) und Ocaml programmiert aber nichts fiel mir so schwer zu lernen wie Python

Das mag sein, wenn man "vorbelastet" ist. Mir fällt es ebenso schwer wirklich funktional zu denken.
Vielleicht gehst du aber auch von der falschen Perspektive ran: in anderen Sprachen mag es üblich sein, sich Datentypen zu implementieren, in python hat man ja schon viele brauchbare.

Ich habe mal ein etwas umfangreicheres Beispiel geschrieben: #11942. Man hätte es vereinfachen können, wenn man das Array-Objekt etwas mehr eingeschränkt hätte. Ist natürlich so noch nicht ganz fertig (`extend`, die an `list.__item__` übergebenen Parameter), aber irgendwas muss ich dir ja auch überlassen ;)
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BlackJack

Beitragvon BlackJack » Freitag 23. November 2007, 15:42

FranzKaiser hat geschrieben:Edit: Sagtmal heißt es nicht Python: "Pseudocode that actually runs!"
Ich hab u.A. in C/C++/VB/JAVA(inkl. EE-Entwicklung) und Ocaml programmiert aber nichts fiel mir so schwer zu lernen wie Python


'Tschuldigung wenn das jetzt etwas hart klingt, aber der Quelltext im ersten Beitrag lässt eher vermuten Du hättest gar keine Ahnung vom Programmieren. Oder Du bist der Meinung "Pseudocode that actually runs!" bedeutet man könnte wahllos irgendetwas hinschreiben und das tut dann was man sich denkt was es tun sollte.

Die `Array.__init__()` sieht nicht aus als wenn da auch nur eine Sekunde drüber nachgedacht wurde. Was die Zuweisung an `s` in der Schleife oder das Zuweisen von `self.size` auf die Länge der Liste, die ja so lang ist wie der alte Wert von `self.size` bewirken soll, ist mir absolut schleierhaft. Genauso Zeile 11: In Zeile 7 wird `l` an eine Liste gebunden. Was wird in Zeile 11 dann wohl der Typ von dem Objekt sein? Richtig: `list`. Immer.

Die Probleme sehe ich da weniger bei der Sprache, sondern eher grundsätzlich bei der sprachunabhängigen Logik. Ich sehe jedenfalls nicht dass Du in der Lage wärst das in Java zu formulieren. Typische Umsteigerprobleme sehen jedenfalls anders aus.

Und so weit ist Python nun auch wieder nicht von den anderen imperativen Sprachen entfernt. Das Tutorial durcharbeiten und die Doku zu Funktionen lesen muss man trotzdem.
FranzKaiser
User
Beiträge: 7
Registriert: Donnerstag 22. November 2007, 13:49

Beitragvon FranzKaiser » Freitag 23. November 2007, 23:20

BlackJack, du scheinst mir ein wenig Ungehalten und deine Krtik scheint mir doch überzogen, als Moderator solltest du deine Wort mit ein wenig mehr bedacht wählen.
Ich weiß ja nicht wie du programmiert oder wie es dir einfällt meinen Programmierstil anhand eines Programfetzens zu Analysieren und komplett kritisieren zu können. Das ist aber keine gute Etikette mein Lieber.
Ich werde es dir dennoch nicht Übel nehmen und deine Entschuldigug (wenn auch sehr unglücklich formuliert) akzeptieren.

Gruß
fK
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Beitragvon HWK » Samstag 24. November 2007, 00:09

Ich kann BlackJack leider nur Recht geben. Über Array.__init__ scheinst Du Dir wirklich keinerlei Gedanken gemacht zu haben. Ein Argument zu übergeben (datatype), dies aber überhaupt nicht zu verwenden, ist sicher kein Problem des Umstiegs einer anderen Sprache auf Python.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder