Listen, Zahlen entnehmen und löschen

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.
Antworten
Gast

Mittwoch 3. November 2004, 09:08

Tag,

also es sieht so aus, dass ich keine Ahnung und keine Zeit hab es selbst herauszufinden bzw. nachzulesen. Ich veröffentliche meinen Programmcode absichtlich nicht, weiil er nicht besonders ausgereift ist und ich mich nicht vollkommen blamieren will!
Ich hab da also zwei Listen x,z. Wie kann ich also ein beliebiges Element dieser Listen entnehmen, und dann genau dieses Ellement löschen? Diee Liste heißt l, falls das was mit l. ist.

mfg
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Mittwoch 3. November 2004, 09:48

Hi!

Niemand blamiert sich hier wenn er Fragen stellt, oder "nicht ausgereiften" Code zeigt!
Zu deiner Frage: Ich versteh sie nicht :D. Du hast die Listen x und z und die Liste heisst l? Naja, so löscht man jedenfalls Elemente aus einer Liste:
del liste[i:j] -> Elemente mit den Indizes i bis j werden gelöscht.
liste.remove(x) -> Das erste Element mit dem Wert x wird gelöscht

Code: Alles auswählen

x = ["a","b","c","d"]
del x[1:2]    # -> x = ["a","c","d"]
x.remove("b")   # -> selbes Ergebnis
Falls Du etwas anderes meinst, zeig mal ein Beispiel :wink:

Gruß, mawe
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Mittwoch 3. November 2004, 11:20

Hi,

wenn nur ein Element gelöscht werden soll geht auch

Code: Alles auswählen

del x[1]
Die von mawe gezeigte Form del x[a:b] bietet sich an, wenn mehrere aufeinanderfolgende Elemente der Liste gelöscht werden sollen, es werden dann alle Elemente vom Index a bis Index b-1 gelöscht.


Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 3. November 2004, 16:22

Du könntest aber auch l.pop() nutzen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Treehorn

Donnerstag 4. November 2004, 09:46

Hehe, das kanne ich noch gar nicht. Ich habs immer so gemacht.

Code: Alles auswählen

li = li[:index] + li[index+1:]
Vielleicht hätte ich Python doch nicht ausschließlichlich durch Foren lesen und Fremden Code angucken lernen sollen ;)[/python]
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 4. November 2004, 11:24

Huhu, das ist abenteuerlich, aber es funktioniert... das gekört wohl zum Kapitel Obfuscating Python :)
Nein, aber mal im Ernst, li.pop() steht auch in der Python Doku, da stehen viele gute Tricks drin :)
Interessant ob pop() so implementiert ist (das was ich schreibe ist sicher nichtmal Python Code *g*)?

Code: Alles auswählen

def pop(self, index):
    record = self[index]
    self = self[:index] + self[index+1:]
    return record
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Gast

Mittwoch 10. November 2004, 08:25

aber wie nehm ich nun ein Element aus der Liste, um dann das Element weiterzuverwenden. Ich glaub ich habs mal gewusst aber ich glaub 8ich habs verdrängt.
Der Code ist noch nicht mal halbwegs soweit, deswegen scheint es mir unmöglich den code zu posten.
.
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Mittwoch 10. November 2004, 08:29

Hi!

Code: Alles auswählen

liste = ["a","b","c"]
x = liste.pop(1)
print x
Gruß, mawe
Gast

Mittwoch 10. November 2004, 08:48

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\PYTHON23\lib\site-packages\Pythonwin\pywin\framework\scriptutils.py", line 310, in RunScript
    exec codeObject in __main__.__dict__
  File "F:\Testscrip.py", line 5, in ?
    print x
AttributeError: 'tuple' object has no attribute 'pop'
>>> 
Das ist der Fehler, wenn ich das so schreibe:

Code: Alles auswählen

x = [2,5,8,44,6,22,11,62,29]
y = [84,3,24,5,654,77,48,68]
l=x,y

x = l.pop(min(l))
print x 
Vielleicht sagt mal einer, was das im einzelnen bedeutet.
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Mittwoch 10. November 2004, 09:06

Hi!

Mit l = x,y hast Du ein Tupel erzeugt, und das kennt kein pop (steht in der Fehlermeldung :wink:).
Ich versteh immer noch nicht was genau Du machen willst. Sollen von x und y jeweils die kleinsten Werte gelöscht werden? Schreib doch mal was das Ergebnis sein soll.

Gruß, mawe
Gast

Mittwoch 10. November 2004, 09:23

Das Ergebnis? Ja ist mir nicht klar, denn es ist nur eiin Teil des ganzen Projekts. Wie mach ich denn sonst, dass zwei Variablen, also die zwei Listen, auf eine Variablee übertragen werden?
Ich wollt nur, dass irgenteins ode das erste oder so aus den Listen genommen wird, damit was gemacht wird und das Element dann gelöscht wird.
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Mittwoch 10. November 2004, 14:24

Hi!

Mit "Ergebnis zeigen" hab ich gemeint: was sollte deiner Meinung nach der Code den Du gepostet hast bewirken (also was sollte in x stehen) :wink:. Na gut, Du willst also von beiden Listen das z.B. erste Element:

Code: Alles auswählen

x = [4,5,6]
y = [7,8,9]
newx = x.pop(0)
newy = y.pop(0)
Jetzt kannst Du mit newx und newy weiterarbeiten. Wenn Du's unbedingt mit deinem l machen willst:

Code: Alles auswählen

l = x,y
newx, newy = [i.pop(0) for i in l]
Hilft das?

Gruß, mawe
Antworten