python如何在字符串中大写一些字符

时间:2015-03-27 19:08:56

标签: python string list uppercase

这是我想要做但不起作用的事情:

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 个答案:

答案 0 :(得分:8)

您可以使用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'

答案 1 :(得分:5)

您没有对原始列表进行更改。您只对循环变量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)

答案 2 :(得分:3)

你可以这样做:

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

答案 3 :(得分:1)

使用生成器表达式如下:

newstring = ''.join(c.upper() if c in toUpper else c for c in mystring)

答案 4 :(得分:1)

问题是al 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 :(得分:0)

这将完成这项工作。请记住,字符串是不可变的,因此您需要在构建新字符串时进行一些变更才能使其生效。

myString = "hello world"
toUpper = ['a', 'e', 'i', 'o', 'u', 'y']
newString = reduce(lambda s, l: s.replace(l, l.upper()), toUpper, myString)

答案 6 :(得分:0)

请尝试这个

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

答案 7 :(得分:0)

简便方法

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='')

答案 8 :(得分:-1)

这是代码:

    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='')