代码之家  ›  专栏  ›  技术社区  ›  BoumTAC

python如何将字符串中的某些字符大写

  •  2
  • BoumTAC  · 技术社区  · 11 年前

    以下是我想做但不起作用的事情:

    mystring = "hello world"
    toUpper = ['a', 'e', 'i', 'o', 'u', 'y']
    array = list(mystring)
    
    for c in array:
        if c in toUpper:
            c = c.upper()
    print(array) 
    

    "e" "o" 在我的数组中不是大写的。

    9 回复  |  直到 10 年前
        1
  •  8
  •   Martijn Pieters    11 年前

    您可以使用 str.translate() method 让Python在一个步骤中用其他字符替换字符。

    使用 string.maketrans() function 要将小写字符映射到其大写目标,请执行以下操作:

    try:
        # Python 2
        from string import maketrans
    except ImportError:
        # Python 3 made maketrans a static method
        maketrans = str.maketrans 
    
    vowels = 'aeiouy'
    upper_map = maketrans(vowels, vowels.upper())
    mystring.translate(upper_map)
    

    这是替换字符串中某些字符的更快、更“正确”的方法;你总是可以把结果 mystring.translate() 但我强烈怀疑你一开始就想用字符串结尾。

    演示:

    >>> try:
    ...     # Python 2
    ...     from string import maketrans
    ... except ImportError:
    ...     # Python 3 made maketrans a static method
    ...     maketrans = str.maketrans 
    ... 
    >>> vowels = 'aeiouy'
    >>> upper_map = maketrans(vowels, vowels.upper())
    >>> mystring = "hello world"
    >>> mystring.translate(upper_map)
    'hEllO wOrld'
    
        2
  •  5
  •   Bhargav Rao rlgjr    11 年前

    您没有对原始列表进行更改。您只对循环变量进行更改 c 。作为解决方法,您可以尝试使用 enumerate .

    mystring = "hello world"
    toUpper = ['a', 'e', 'i', 'o', 'u', 'y']
    array = list(mystring)
    
    for i,c in enumerate(array):
        if c in toUpper:
            array[i] = c.upper()
    
    print(array) 
    

    输出

    ['h', 'E', 'l', 'l', 'O', ' ', 'w', 'O', 'r', 'l', 'd']
    

    注意:如果您需要 hEllO wOrld 作为答案,您不妨使用 join 如中所示 ''.join(array)

        3
  •  3
  •   user648852 user648852    11 年前

    您可以执行以下操作:

    mystring = "hello world"
    toUpper = ['a', 'e', 'i', 'o', 'u', 'y']
    
    >>> ''.join([c.upper() if c in toUpper else c for c in mystring])
    hEllO wOrld
    
        4
  •  1
  •   neiesc    11 年前

    问题是 c 不用于任何对象,这不是通过引用传递的。

    对于初学者,我会这样做:

    mystring = "hello world"
    toUpper = ['a', 'e', 'i', 'o', 'u', 'y']
    array = []
    for c in mystring:
        if c in toUpper:
            c = c.upper()
        array.append(c)
    print(''.join(array))
    
        5
  •  1
  •   Malik Brahimi    11 年前

    使用生成器表达式,如下所示:

    newstring = ''.join(c.upper() if c in toUpper else c for c in mystring)
    
        6
  •  0
  •   esc    11 年前

    这将完成任务。请记住,字符串是不可变的,因此您需要对构建新字符串进行一些修改,以使其正常工作。

    myString = "hello world"
    toUpper = ['a', 'e', 'i', 'o', 'u', 'y']
    newString = reduce(lambda s, l: s.replace(l, l.upper()), toUpper, myString)
    
        7
  •  0
  •   J.Jai    7 年前

    请试试这个

    mystring = "hello world"
    toUpper = ['a', 'e', 'i', 'o', 'u', 'y']
    
    array = list(mystring)
    new_string = [x.upper() if x in toUpper else x for x in array ]
    
    
    
    new_string = ''.join(new_string)
    print new_string
    
        8
  •  0
  •   Butiri Dan    6 年前

    简易方法

    name='india is my country and indians are my brothers and sisters'
    vowles='a','e','i','o','u'
    for name_1 in name:
        if name_1 in vowles:
            b=name_1.upper()
            print(b,end='')
        else:
            print(name_1,end='')
    
        9
  •  -1
  •   Avinash Dalvi    6 年前

    以下是代码:

        name='india is my country and indians are my brothers and sisters'
        vowles='a','e','i','o','u'
        for name_1 in name:
            if name_1 in vowles:
                b=name_1.upper()
                print(b,end='')
            else:
                print(name_1,end='')
    
    推荐文章