Python - 手动删除字符串中的特定字母

时间:2016-07-12 14:37:01

标签: python string

我知道string.replace("x", "y")方法,但我尝试从字符串中手动删除字符,以帮助我更好地理解Python和编程。我现在的方法详述如下,但我不明白为什么" Dee"并删除" e"它将返回" De",但对于" John Do"并删除" o"它将返回" Jhn D"。因此,它删除了两个字母,但在第一个字母中只有一个字母。

非常感谢任何帮助。

def remove_letter():  # Remove a selected letter from a string
    base_string = str(raw_input("Enter some text: "))
    letter = str(raw_input("Enter the letter to remove: "))  # takes any string size
    letter = letter[0]  # ensures just one character is used
    length = len(base_string)
    location = 0

    while location < length:
        if base_string[location] == letter:
            base_string = base_string[:location] + base_string[location+1::]  
            # concatenate string using slices
            length -= 1
        location += 1

    print("Result %s" % base_string)

2 个答案:

答案 0 :(得分:3)

oyu的问题在于,在删除字母时更改要删除字母的字符串的大小:
当你删除第一个&#39; e&#39;在Dee,你有location = 1,对应于第一个&#e; e,但现在是第二个&#39;。删除e后,在当前循环结束时,您的位置= 2,长度= 2,因此停止循环。

如何解决问题:仅在找不到字母时增加位置:

else:
    location += 1

这样可以防止你的循环在删除字母后不立即检查字母。

如果您需要更多解释,请询问。

答案 1 :(得分:2)

考虑到khelwood和HolyDanna的说法,这可能是一种可行的方法:

def removeletter(string, letter):
    out = ''
    for i in string:
        if not i == letter:
            out += i
    return out

altered_string = removeletter(string, letter)

编辑 - 您也可以轻松地将其扩展为str.replace()方法,但仅适用于单个字符:

def stringreplace(string, letter, replacement):
    out = ''
    for i in string:
    if i == letter:
        out += replacement
    else:
        out += i
    return out

altered_string = stringreplace(string, letter, replacement)