2016-06-30 7 views
0

Ich versuche, eine Methode zu erstellen, die eine Zeichenfolge eingibt, nach dem ersten Buchstaben der Zeichenfolge sucht und dann alle Vorkommen dieses Briefs durch ein anderes Zeichen ersetzt.Wie finden Sie das erste Zeichen einer Zeichenfolge und ersetzen alle Ergebnisse davon in der gleichen Zeichenfolge in Python?

Es funktioniert offensichtlich nicht, s [Buchstabe] zu dem neuen Zeichen zu verwenden, da der Buchstabe in diesem Fall kein Index ist. Aber welche Lösung sollte stattdessen verwendet werden?

def fix_start(s): 

    letterToReplace = s[0] 

    for letter in s: 
     if letter is letterToReplace: 
      s[letter] = '*' 

    return s 
+4

einfach 's.replace (s [0], ' * ') ' – vaultah

+0

Beachten Sie, dass Sie eine Zeichenfolge in Python nicht ändern können, daher ist die resultierende Zeichenfolge nicht die * gleiche * Zeichenfolge. Auch deshalb wird Ihre Lösung nicht funktionieren, da 's [Buchstabe] = '*'' bedeuten würde, die Zeichenfolge zu ändern. – skyking

Antwort

0

Halten Sie das Handbuch immer bereit. Der Typ str hat eine Methode, die sogar replace genannt wird.

str.replace(old, new[, count])

Return a copy of the string with all occurrences of substring old replaced by new. If the optional argument count is given, only the first count occurrences are replaced.

So können Sie nur tun

def fix_start(s): 
    return s.replace(s[0], '*') 

Beachten Sie, dass, wenn Sie eine Situation, wo man kann nicht einfach tun str.replace (zB Sie haben eine Liste von Strings, nicht Zeichenfolge) die enumerate Funktion ist praktisch. Es wird Ihnen das Element und seinen Index:

def fix_start(sl): 
    elementToReplace = sl[0] 
    for idx, elem in enumerate(sl): 
    if elem == elementToReplace: 
     sl[idx] = '*' 
    return sl 

Auf einer Seite Knoten nicht testen letter is letterToReplace in solchen Fällen. Der Operator is testet für Identität, nicht Gleichheit. Identität bedeutet dasselbe Objekt (z. B. dieselbe Speicheradresse), während Gleichheit bedeutet, dass es dieselbe Bedeutung hat (z. B. den Buchstaben A).

Für grundlegende primitive Typen (Zeichen, kleine Inte, etc.), Python hält nur ein Objekt herum. Zum Beispiel sind int(1) == int(1) und äquivalent. foo = int(123123); (foo == 123123, foo is 123123) wird jedoch den is Test nicht bestehen.

+2

'TypeError: 'str' -Objekt unterstützt keine Item-Zuweisung. – vaultah

+0

@vaultah Wie der Text sagt, ist die zweite Version nicht für' str' gedacht, sondern für iterables wie 'list [str]'. – MisterMiyagi

0

können Sie verwenden, um die re Bibliothek:

import re 

def fix_start(s): 
    return re.sub(s[0], "*", s) 

print(fix_start("string")) 

Ausgang:

*tring 

eine andere Art und Weise, ist dies:

def fix_start(s): 
    return "".join(map(lambda x: '*' if x is s[0] else x, s)) 
+0

Was für ein schweres Werkzeug für solch eine einfache Aufgabe ... –

+1

Das ist wahr @SergeBallesta, kann nicht weh tun, um dem OP eine andere Möglichkeit zu zeigen, es zu tun, auch wenn es ein bisschen komplizierter ist. – RoadRunner

Verwandte Themen