Hallo, wieder eine Anfängerfrage.
Ich definiere eine Liste z.B.:
liste = [a,b],
a und b sind Zahlen. Mit a, b führe ich math. Operationen durch
und will die Ergebnisse in dieser Liste unterbringen, z.B. an der
x-ten Stelle, x > listenplatz(b)+1. Wenn ich das mit:
"liste.insert (x,Ergebnis)"
mache wird das eingefügte Element aber direkt hinter "b" gesetzt.
Gibt's da eine Möglichkeit?
Danke
Sebastian
Listenfrage
@sebastian12: Du müsstest halt schon eine entsprechend grosse Liste verwenden. Python kann ja schlecht erraten was in den Plätzen zwischen `b` und dem neuen Element eingefügt werden soll. Ansonsten könntest Du auch über ein Dictionary nachdenken.
-
- User
- Beiträge: 10
- Registriert: Mittwoch 4. März 2009, 12:10
Naja, ich weiß nicht im vorraus, wie lange ich die Liste sein soll.BlackJack hat geschrieben:@sebastian12: Du müsstest halt schon eine entsprechend grosse Liste verwenden. Python kann ja schlecht erraten was in den Plätzen zwischen `b` und dem neuen Element eingefügt werden soll. Ansonsten könntest Du auch über ein Dictionary nachdenken.
Ich dachte, es gäbe die Möglichkeit variabler Listenlänge.
Sonst gucke ich mir Dictionarys mal an.
Danke BlackJack
-
- User
- Beiträge: 10
- Registriert: Mittwoch 4. März 2009, 12:10
Aber, wie in meinem 1. Post geschrieben, wird der neue Eintrag
direkt hinter den letzten gesetzt und nicht 2 Stellen weiter, wenn ich das will.
direkt hinter den letzten gesetzt und nicht 2 Stellen weiter, wenn ich das will.
also wenn du das neue element einfach an das ende der liste dranhängen willst, kannst du append verwenden
so in etwa würde das aussehen
Code: Alles auswählen
mylist = [a, b]
c = a + b
mylist.append(c)
print mylist
>>> [a, b, c]
-
- User
- Beiträge: 10
- Registriert: Mittwoch 4. März 2009, 12:10
@cz3kit
nein, das wollte ich nicht.
Das neue Element soll paar Listenplätze weiter hinten gesetzt werden.
Aber nach der Antwort von BlackJack habe ich das Problem verstanden.
Danke
nein, das wollte ich nicht.
Das neue Element soll paar Listenplätze weiter hinten gesetzt werden.
Aber nach der Antwort von BlackJack habe ich das Problem verstanden.
Danke
- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
Listen haben keine Lücken. Jeder Index, vom ersten bis zum letzten, hat einen Wert. Wenn du eine Liste mit zwei Elementen hast und an fünfter Stelle ein neues Element einfügen willst, musst du den Zwischenraum irgendwie füllen.
Besser ist es allerdings, bei solchen Problemen ein dict() zu nehmen oder seinen Ansatz nochmal komplett zu überdenken. Warum muss Eingabe und Ergebnis in der selben Liste stehen?
Besser ist es allerdings, bei solchen Problemen ein dict() zu nehmen oder seinen Ansatz nochmal komplett zu überdenken. Warum muss Eingabe und Ergebnis in der selben Liste stehen?
-
- User
- Beiträge: 10
- Registriert: Mittwoch 4. März 2009, 12:10
[quote="Defnull"]Listen haben keine Lücken. Jeder Index, vom ersten bis zum letzten, hat einen Wert. Wenn du eine Liste mit zwei Elementen hast und an fünfter Stelle ein neues Element einfügen willst, musst du den Zwischenraum irgendwie füllen.
wie gesagt ,verstanden.
Es geht um Polynome, die verändert werden.
Auf Grund der Algorithmusstruktur ist es praktikabler, immer die
selbe Liste, Dictionary... was auch immer zu nehmen
wie gesagt ,verstanden.
Es geht um Polynome, die verändert werden.
Auf Grund der Algorithmusstruktur ist es praktikabler, immer die
selbe Liste, Dictionary... was auch immer zu nehmen
Dann füll doch die Zwischenräume mit Nullen auf. Das entspricht dann auch der üblichen Darstellung von Polynomen als Vektor. Also:Es geht um Polynome, die verändert werden.
Code: Alles auswählen
6x**4 + x**3 + 4x + 2
[6, 1, 0, 4, 2]
-
- User
- Beiträge: 10
- Registriert: Mittwoch 4. März 2009, 12:10
@HerrHagen
Das ist mir schon klar.
Wenn deg (f) = n, deg (f^2) = 2n.
Also doppelte Listenlänge. Da ich im Vorraus nicht weiß,
wie viele Operationen zu machen sind, kann ich die Listenlänge
nicht im Vorraus definieren.
Das ist mir schon klar.
Wenn deg (f) = n, deg (f^2) = 2n.
Also doppelte Listenlänge. Da ich im Vorraus nicht weiß,
wie viele Operationen zu machen sind, kann ich die Listenlänge
nicht im Vorraus definieren.
Ich versteh zwar nicht so recht was du meinst, aber die Listenlänge ist variabel.
Listen haben nur keine eingebaute Methode um Objekte an einer Position größer ihrer eigenen Länge einzufügen und die "Lücken" mit einem anderen Objekt aufzufüllen.
Aber es hindert dich ja nichts daran, eine Klasse zu schreiben, die von list erbt oder intern eine Liste nutzt und diese Funktionalität entsprechend implementiert.
Listen haben nur keine eingebaute Methode um Objekte an einer Position größer ihrer eigenen Länge einzufügen und die "Lücken" mit einem anderen Objekt aufzufüllen.
Aber es hindert dich ja nichts daran, eine Klasse zu schreiben, die von list erbt oder intern eine Liste nutzt und diese Funktionalität entsprechend implementiert.
-
- User
- Beiträge: 10
- Registriert: Mittwoch 4. März 2009, 12:10
Jetzt verstehe ich nichts.
Ich bin ein Anfänger. Ich dachte halt, ich könnte die Liste
"größer" machen, falls Bedarf.
Ich überlege mir was anderes .
Danke
Ich bin ein Anfänger. Ich dachte halt, ich könnte die Liste
"größer" machen, falls Bedarf.
Ich überlege mir was anderes .
Danke
Du kannst sie ja auch bei Bedarf größer machen. Das Listenobjekt hat nur keine Methode die genau das macht, was du haben willst.
Du kannst dir aber leicht selber eine Funktion dafür bauen:
(Man sollte so etwas besser als Methode einer Klasse umsetzten, ich wollte es aber so simpel wie möglich halten)
MFG HerrHagen
Du kannst dir aber leicht selber eine Funktion dafür bauen:
Code: Alles auswählen
def insert_plus(list_obj, index, obj, fill=0):
if index <= len(list_obj):
list_obj.insert(index, obj)
else:
list_obj.extend([fill] * (index - len(list_obj) + 1))
list_obj[index] = obj
Code: Alles auswählen
>>> x=[0, 1, 2]
>>> insert_plus(x, 7, "7")
>>> x
[0, 1, 2, 0, 0, 0, 0, '7']
MFG HerrHagen
-
- User
- Beiträge: 10
- Registriert: Mittwoch 4. März 2009, 12:10
@HerrHagen
So was brauche ich. Danke
Ich verstehe zwar nicht, was da passiert
aber ich werd's herausfinden
Danke
So was brauche ich. Danke
Ich verstehe zwar nicht, was da passiert
aber ich werd's herausfinden
Danke
Da kann man noch einen Fall einsparen:
Edit: Ach, da kann man alle Fälle einsparen:
Code: Alles auswählen
def insert_plus(list_obj, index, obj, fill=0):
if index >= len(list_obj):
list_obj.extend([fill] * (index - len(list_obj) + 1))
list_obj[index] = obj
Code: Alles auswählen
def insert_plus(list_obj, index, obj, fill=0):
list_obj.extend([fill] * (index - len(list_obj) + 1))
list_obj[index] = obj
Das Leben ist wie ein Tennisball.
Nicht wenn das usprüngliche Verhalten beibehalten werden soll.
Deine Variante überschreibt das Objekt mit dem Index (also eher ein setitem_plus).
In der usprünglichen Variante wurde das Objekt eingefügt:
MFG HerrHagen
Deine Variante überschreibt das Objekt mit dem Index (also eher ein setitem_plus).
Code: Alles auswählen
>>> x = [0,1,2]
>>> insert_plus(x, 0, "X")
>>> x
['X', 1, 2]
Code: Alles auswählen
>>> x = [0,1,2]
>>> insert_plus(x, 0, "X")
>>> x
['X', 0, 1, 2]