从字符串中删除字母

时间:2016-10-28 20:18:28

标签: python python-2.7

我是python的新手并经历了一些课程材料并写了这个函数来从字符串中删除特定字符,无论该字符串在字符串中有多少次。

def remove_letter(): #Remove a selected letter from a string
    base_string = str(raw_input("Enter String: "))
    letter_remove = str(raw_input("Enter Letter: ")) #takes any size string
    letter_remove = letter_remove[0]
    string_length = len(base_string)
    location = 0

    while (location < string_length): #by reference (rather than by value)
        if base_string[location] == letter_remove:
            base_string = base_string[:location] + base_string[location+1::]
            string_length -= 1
        location+=1

    print "Result: %s" % base_string
    return

现在这里是我不理解的,如果我在字符串中加上“asdfasdfasdf”,然后选择删除字母“d”,它就完美了。但是如果在字符串中输入“Hello”并选择删除字母“l”,它将只删除一个“l”,结果将是“Helo”。当我把“asdfasdfasdf”和现在的“你好”

时,我无法理解它的工作原理

4 个答案:

答案 0 :(得分:0)

问题是你的if语句之外有location+=1

您的代码在删除后的字母后会跳过该字母。

由于您在删除字母时在迭代中同时执行string_length -= 1location+=1location实际上会移动两个索引。

要修复它,你需要做的不仅仅是那个,因为在{if-statement之外还需要location+=1

我刚刚解释了出了什么问题,我现在必须跑,但我看到其他人已经给你解决方案了,所以我并不担心。祝你好运!

答案 1 :(得分:0)

考虑

#base_string is 'Hello', location is 2 and string_length is 5.
base_string = base_string[:location] + base_string[location+1::] #'Helo'

然后减少字符串长度并增加位置。  您的位置为3,但'Helo'[3] == 'o'不是'l'。从字符串中删除元素时,实质上是将所有剩余字符移动1,因此不应更新location,因为它现在已经指向下一个字符。

while (location < string_length): #by reference (rather than by value)
    if base_string[location] == letter_remove:
        base_string = base_string[:location] + base_string[location+1::]
        string_length -= 1
    else:
       location+=1

答案 2 :(得分:0)

这是一个错误。仅当连续出现相同的字符时,它才能正常工作。

  1. Hello,当它遇到第一个l
  2. 时,它会忽略Hello中的第二个l
  3. 如果您尝试Helol,则会删除l
  4. 如果您尝试Helllo,结果将是Helo
  5. <强>解决方案: 当您遇到目标字母时,将其删除并继续迭代更新字符串的其余字符,而不是增加location

    添加continue将解决您的问题。

    while (location < string_length): #by reference (rather than by value)
        if base_string[location] == letter_remove:
            base_string = base_string[:location] + base_string[location+1::]
            string_length -= 1
            continue
        location+=1
    

    测试:

    python2 test.py                                                                                   Fri 28 Oct 14:25:59 2016
    Enter String: Hello
    Enter Letter: l
    Result: Heo
    

答案 3 :(得分:-1)

您可以随时使用字符串替换。

base_string.replace(letter_remove,"")