Hallo zusammen,
ich frage mich, ob es eine Funktion gibt, welche gewisse characters in einem String ignoriert.
Mein momentanes Problem:
Ich habe Strings wie "Flut+licht" und möchte sie nachher in einer Funktion behandeln. Dafür sollte aber das "+" ignoriert werden, also etwas wie:
if text.ignore("+") in names: [...]
Ich sage bewusst "ignorieren" und nicht ersetzen (replace) - weil dann weiss ich am Schluss nicht mehr, wo und bei welchen Wörtern dieses "+" vorkam. (Es haben nur vereinzelte Wörter ein "+" - und dieses möchte ich am Schluss wieder haben...)
Danke für Ideen, Tipps und Hilfe
Gewisse Zeichen in String ignorieren
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Du könntest z.B. ein Dictionary bauen, welches den Originalstring auf einen "bereinigten" abbildt. Bei kritischen Operationen (wie z.B. einem Vergleich o.ä.) holst Du Dir das dem Dictionary die bereinigte Form.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Gegenfrage: Was ist daran nicht einfach?MarcelF6 hat geschrieben:Eine "einfachere" Lösung gibt es also wirklich nicht?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Wenn ich mal alle performancekritischen Aspekte außen vor lasse dann erzeuge aus den Quellstrings tupel: ('Flut', 'licht').
Den Quellstring kann man daraus herleiten und das ganze lässt sich auch als ein String betrachten. str.join ist Dein Freund hier. So hast Du auch keine Redundanzen bei Deinem Datenbestand.
Wesentlich einfacher wirst Du es nicht mehr hinbekommen. Es sei denn es erfindet jemand eine MagicWand Klasse.
Den Quellstring kann man daraus herleiten und das ganze lässt sich auch als ein String betrachten. str.join ist Dein Freund hier. So hast Du auch keine Redundanzen bei Deinem Datenbestand.
Wesentlich einfacher wirst Du es nicht mehr hinbekommen. Es sei denn es erfindet jemand eine MagicWand Klasse.
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
Hallo zusammen,
vielen Dank für eure Antworten!
Ich habe mich entschieden, mit Listen zu arbeiten, denn die eigenen sich besser für die weitere Verarbeitung.
Ich habe noch eine Frage:
Das Ursprungs"format" sieht so aus:
Ich probiere seit mehreren Stunden, target in eine Liste umzuwandeln (geklappt), dann dort zu bearbeiten (geklappt), und dann wieder ins Ursprungs"format" zurückzuverwandeln. Hier klappt etwas nicht...könnte mir jemand zeigen, wie das geht - bzw. einen Tipp geben?
Ich wäre sehr dankbar.
Merci, Marcel.
vielen Dank für eure Antworten!
Ich habe mich entschieden, mit Listen zu arbeiten, denn die eigenen sich besser für die weitere Verarbeitung.
Ich habe noch eine Frage:
Das Ursprungs"format" sieht so aus:
Tupel kann man ja nicht bearbeiten. Nun meine Frage: Wie kann ich die Tupel bearbeiten, sodass ich am Schluss wieder das Ursprungsformat erhalte?target = [([('Kid', '200-5'), (u'Rock', '200-6')], u's725')]
Ich probiere seit mehreren Stunden, target in eine Liste umzuwandeln (geklappt), dann dort zu bearbeiten (geklappt), und dann wieder ins Ursprungs"format" zurückzuverwandeln. Hier klappt etwas nicht...könnte mir jemand zeigen, wie das geht - bzw. einen Tipp geben?
Ich wäre sehr dankbar.
Merci, Marcel.
@MarcelF6: Du sagst man kann Tupel nicht bearbeiten und fragst im nächsten Satz wie man Tupel bearbeiten kann. Na gar nicht. Du kannst neue erstellen.
Und wie man aus der Datenstruktur die wir nicht kennen wieder die machen kann die Du gezeigt hast, kann natürlich keiner beantworten. Jedenfalls nicht ohne Glaskugel.
Und wie man aus der Datenstruktur die wir nicht kennen wieder die machen kann die Du gezeigt hast, kann natürlich keiner beantworten. Jedenfalls nicht ohne Glaskugel.
haha ja, du verstehst was ich meinte
Nein aber ernsthaft: Ich habe mir vorgestellt, die Daten aus target in eine temporäre Liste zu speichern, dort zu bearbeiten, und nachher eine neue Liste mit den bearbeiteten Daten (und demselben Format wie target) wieder auszugeben.
Ist das wirklich nicht möglich? :S
Nein aber ernsthaft: Ich habe mir vorgestellt, die Daten aus target in eine temporäre Liste zu speichern, dort zu bearbeiten, und nachher eine neue Liste mit den bearbeiteten Daten (und demselben Format wie target) wieder auszugeben.
Ist das wirklich nicht möglich? :S
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
*WIE* sollen denn die Daten in der Liste aussehen???MarcelF6 hat geschrieben: Ich habe mir vorgestellt, die Daten aus target in eine temporäre Liste zu speichern, dort zu bearbeiten, und nachher eine neue Liste mit den bearbeiteten Daten (und demselben Format wie target) wieder auszugeben.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Siehe Beispiel: In einer Liste sin Tupel gespeichert, die aus einer Liste (bestehend aus mind. 1 Tupel), und einer ID bestehen.
Beispiel = [([('Name', '200-5'), (u'Irgendwas', '200-6')], u's725'), ([('Nochwas', '250-5'), (u'undsoweiter', '250-6')], u's985')]
Beispiel = [([('Name', '200-5'), (u'Irgendwas', '200-6')], u's725'), ([('Nochwas', '250-5'), (u'undsoweiter', '250-6')], u's985')]
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
*seufz* Noch einmal: Wie sollen die Daten in Deiner bisher imaginären "temporären Liste" aussehen? Dazu hast Du uns immer noch kein Beispiel gegeben...MarcelF6 hat geschrieben:Siehe Beispiel: ...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Wenn du eine Liste einer Funktion übergibst, ändert sich die Liste dadurch nicht. Auch ändert sich die Liste nicht, wenn du die Werte mittels eines "replace" oder "split" wiedergibst.
Ich glaube dein Problem ist durch fehlendes Verständnis entstanden.
Ich glaube dein Problem ist durch fehlendes Verständnis entstanden.
Code: Alles auswählen
stringlist = ["flucht+licht", "leucht+turm", "kaffeebecher"]
for string in stringlist:
print("".join(string.split('+')))
print(stringlist)
Und was genau passt Dir an einer "enttupelten" analogen Datenstruktur nicht? Wenn Du die Tupel durch Listen ersetzt, hast du die gleichen Möglichkeiten plus der Veränderbarkeit:MarcelF6 hat geschrieben:...
Tupel kann man ja nicht bearbeiten. Nun meine Frage: Wie kann ich die Tupel bearbeiten, sodass ich am Schluss wieder das Ursprungsformat erhalte?
Ich probiere seit mehreren Stunden, target in eine Liste umzuwandeln (geklappt), dann dort zu bearbeiten (geklappt), und dann wieder ins Ursprungs"format" zurückzuverwandeln. Hier klappt etwas nicht...
...
Code: Alles auswählen
from collections import deque
def detuple_strange_container_thingy(it):
stack = deque()
stack.appendleft((1, it))
transformed = []
entries = [transformed]
depth_old = 1
while stack:
depth, it = stack.popleft()
it_iter = iter(it)
if depth_old > depth:
entries = entries[:depth]
elif len(entries) < depth:
new = []
entries.append(new)
entries[depth-2].append(new)
target = entries[depth-1]
for el in it_iter:
if not hasattr(el, '__iter__'):
target.append(el)
else:
stack.appendleft((depth, it_iter))
stack.appendleft((depth+1, el))
break
depth_old = depth
return transformed