Seite 1 von 1

mehrere replace Aufrufe

Verfasst: Montag 27. Oktober 2008, 19:57
von Twilo
Hallo,

gibt es eine einfachere Variante für folgenden Code?

Code: Alles auswählen

return name.replace('(', '\(').replace(')', '\)').replace('/', '_').replace(' ', '_')
in php würde ich es z.B. wie folgt lösen:

Code: Alles auswählen

$search  = array('(',  ')',  '/', ' ');
$replace = array('\(', '\)', '_', '_');
return str_replace($search, $replace, $name); 
mfg
Twilo

Verfasst: Montag 27. Oktober 2008, 20:18
von str1442
Du könntest aus den alten und neuen Elementen einen Tupel machen und die mit "zip" (oder izip) im einer for-schleife verbinden, und die variable immer wieder neu an sich selbst binden. Dann könntest du die einzelnen Objekte auch leicht übergeben lassen oder als Konstante speichern, ist auch einfach zu ändern. Andere Möglichkeit (und bessere sobald die Struktur erweiterbar sein sollte) wäre ein dict und dessen Methode iteritems().

Verfasst: Montag 27. Oktober 2008, 20:22
von Darii
Lösungen gibts genug: http://www.python-forum.de/topic-16062.html


btw: Und die Schweine wollen reduce rausschmeißen... ;)

Verfasst: Montag 27. Oktober 2008, 21:34
von BlackJack
`reduce()` wird nur verlegt, nicht rausgeworfen:

Code: Alles auswählen

Python 3.0b2 (r30b2:65080, Aug 20 2008, 20:41:17)
[GCC 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> reduce
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'reduce' is not defined
>>> from functools import reduce
>>> reduce
<built-in function reduce>
>>>
Also keine Panik. :-)

Verfasst: Mittwoch 29. Oktober 2008, 10:02
von sma

Code: Alles auswählen

import re

def replace_all(search, replace, s):
    return re.sub("|".join("(%s)" % re.escape(s) for s in search), lambda m: replace[m.lastindex - 1], s)
    
search  = ['a', 'b', 'c']
replace = ['X', 'Y', 'Z']

print replace_all(search, replace, "ich habe")
Stefan