在Python中从字符串中删除大写字母

时间:2015-04-06 11:55:11

标签: python

我正在尝试编写一个消除带有字符串和2个可选参数的函数。第一个可选参数(bad_characters)接受一个字母,第三个参数(case_sensitive)接受一个布尔值。该函数应该采用字符串s并删除bad_characters的所有实例。如果case_sensitive为true,则该函数应该区分大小写。如果为false,则不需要。这是我到目前为止所做的。

def eliminate(s,bad_characters = [],case_sensitive = True or False):
    ''' Takes a string s and returns the string with all bad_characters
    removed. If case_sensitive is True, then the function will only
    remove uppercase letters if there are uppercase letters in
    bad_characters.
    String --> String'''
    while True:
        if case_sensitive = False:
            for character in s:
                if bad_characters == character:
                    newlist = s.replace(bad_characters,'')
                    return newlist
        break

如果需要,我很难弄清楚如何使该函数删除大写字母。如果bad_characters是列表,元组或字符串,该函数也应该有效。

5 个答案:

答案 0 :(得分:2)

您的问题是错过了对str.replace的理解,因为它只是替换了一个字符,因此您需要遍历bad_characters并逐个删除它们。

而不是使用==,您可以使用in操作数来检查成员资格,然后从字符串中删除character

def eliminate(s,bad_characters = '',case_sensitive = False):
    ''' Takes a string s and returns the string with all bad_characters
        removed. If case_sensitive is True, then the function will only
        remove uppercase letters if there are uppercase letters in
        bad_characters.
        String --> String'''
    if case_sensitive == False:
        for character in s:
            if  character in bad_characters:
                s = s.replace(character,'')
        return s

作为从字符串中删除特殊字符的更加pythonic的方法,您可以使用str.translate方法:

s.translate(None,bad_characters)

答案 1 :(得分:0)

您可以在此处使用非常方便的str.swapcase功能。请注意,为清楚起见,以下代码会覆盖bad_characters,但您可以轻松修改它以保持不变。

def eliminate(s, bad_characters, case_sensitive):    
    if not case_sensitive:
        bad_characters += map(str.swapcase, bad_characters)
    return ''.join([c for c in list(s) if c not in bad_characters])

print eliminate('AaBb', ['a'], False)    
print eliminate('AaBb', ['a'], True)    
print eliminate('AaBb', ['A'], True) 

Bb
ABb
aBb

答案 2 :(得分:0)

a = 'AbCdEfG'
print(''.join([x[0] for x in zip(a, a.upper()) if x[0] != x[1]]))
# bdf

答案 3 :(得分:0)

您可以使用string.translate(python2)。

  

string.translate(s,table [,deletechars])

     

删除deletechars中的所有字符(如果存在),然后使用table翻译字符,该表必须是256个字符的字符串,为每个字符值提供翻译,并按其序号索引。如果table为None,则仅执行字符删除步骤。

代码中的其他错误:

  • 仅使用case_sensitive初始化TrueTrue or FalseTrue
  • While True然后break一无所获。删除它。
  • if case_sensitive = False:是一项任务,您需要进行比较==case_sensitive是布尔值,因此只需使用if case_sensitiveif not case_sensitive
  • bad_characters == character错了。你无法将列表与角色进行比较。请改用character in bad_characters

以下是更正的整个解决方案:

def eliminate(s, bad_characters = [], case_sensitive = True):
    if case_sensitive: #True
        return s.translate(None, "".join(bad_characters))
    else: 
        s = s.translate(None, "".join(bad_characters).lower()) 
        s = s.translate(None, "".join(bad_characters).upper())
        return s

答案 4 :(得分:-2)

def eliminate(s, bad_characters = [], case_sensitive=True):
    for character in bad_characters:
        if not case_sensitive:
            s = s.replace(character.lower(),'')
            s = s.replace(character.upper(),'')
        else:
            s = s.replace(character,'')
    return s