Doppelte Zeichen aus Zeichenkette löschen.[solved]

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
icepacker
User
Beiträge: 49
Registriert: Dienstag 15. November 2005, 18:48

Hi
Das Problem hat sich als etwas schwieriger erwiesen, als zunächst gedacht :?
Deswegen frage ich jetzt mal hier im Forum nach.
Ich will einfach alle doppelten Zeichen aus einem String löschen. Gibts da vielleicht schon eine Built-in Funktion?
Zum Beispiel:

Code: Alles auswählen

>>delete_doubles('hallokila')
>> 'haloki'
Das Problem was sich mir gestellt hatte war, dass man die Sequenz (hier ein String) über die iteriert wird, ja bekanntermaßen nicht verändern kann.
Also hab ich eine Kopie genommen und daraus die Doppelten gelöscht.
Leider sind dann die Positionen verrutscht. Ansätze sahen zB so aus:

Code: Alles auswählen

def delete_doubles( string ):
	new_string = string
	for pos, char in enumerate( string ):
		if new_string.count( char ) > 1:
			new_string = string[:pos] + string[pos+1:]
	return new_string
Ich hoffe ihr könnt mir helfen. Danke!

lg icepacker
Zuletzt geändert von icepacker am Montag 26. Juni 2006, 21:08, insgesamt 1-mal geändert.
ubuntu linux !!
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

ich glaub du meisnt was anderes an einer stelle:
>>delete_doubles('hallokila')
>>'halokila'
anstelle vom löschen von 'la' noch am ende.
richtig? sonst verwirrt mich das...
icepacker
User
Beiträge: 49
Registriert: Dienstag 15. November 2005, 18:48

Hi
Ich habe jetzt eine Möglichkeit gefunden:

Code: Alles auswählen

def delete_doubles( string ):
	new_string = ''
	string = list( set( list( string ) ) )
	for item in string:
		new_string += item
	return new_string
Leider verlieren die Zeichen hier ihre ursprüngliche Reihenfolge.
Gibts also noch weitere Lösungen in denen die Reihenfolge beibehalten wird?

EDIT:
Mist jetzt bin ich verwirrt. Ich glaub ich muss grad selbst nochmal überlegen, was ich jetzt nochmal brauche.
Also ob einfach nicht zwei gleiche Zeichen hintereinander folgen dürfen oder ob im ganzen String keine Zeichen mehrmals vorkomment dürfen.
Wie gesagt, da muss ich gerade nochmal nachdenken :oops: :?
Zuletzt geändert von icepacker am Montag 26. Juni 2006, 20:57, insgesamt 1-mal geändert.
ubuntu linux !!
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

kannst du das sonst in einem dic ablegen?
dann wäre das einfacher. sprich: würd ich machen :-)
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi!

Also wenn Du einfach hintereinander liegende Doppelte löschen willst, wäre vielleicht das eine Möglichkeit:

Code: Alles auswählen

import re

s = "halllllooooo"
new = re.sub(r"(.)\1+", r"\1", s)
Gruß, mawe
icepacker
User
Beiträge: 49
Registriert: Dienstag 15. November 2005, 18:48

lol sorry Leute war grad echt etwas daneben...
Aber war irgendwie die ganze Zeit auf dem falschen Dampfer :roll:
Ich suchte, glaube ich^^, einfach folgendes:

Code: Alles auswählen

In [56]: string = 'hallokila'

In [57]: new = ''

In [58]: for i in string:
   ....:     if i not in new:
   ....:         new += i
   ....:

In [59]: new
Out[59]: 'haloki'
ubuntu linux !!
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

aber mit welchem sinn wird "la" am ende gelöscht?
das ist nicht doppelt... o0
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

murph, ich schätze mal, er will dass in dem Wort jeder Buchstabe nur einmal vorkommt.
icepacker
User
Beiträge: 49
Registriert: Dienstag 15. November 2005, 18:48

Das Problem war die Zeichenkette so zu verändern, dass alle Zeichen einzigartig sind bzw. nur einmal vorkommen.

lg icepacker
ubuntu linux !!
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

achso...hab halt nur aufeinanderfolgende darunter verstanden, aber weils nun solved is, isses auch egal.
Antworten