指数资本化

时间:2018-03-04 14:37:37

标签: python arrays indexing uppercase

我想创建一个函数,根据提供的数组大写字符串。我当前的函数有两个参数:你想要改变的字符串和一个与你想要改变的字母相对应的数组。我的功能如下:

def capitalize(s, ind):
    for i in ind:
        try:
            s = s.replace(s[i], s[i].upper())
        except IndexError:
            print("Sorry, index is not range!")
    return s

当我尝试一些例如:

时,这个功能似乎起作用了
capitalize("abc",[1,2])
#Output: aBC

但是,我无法弄清楚为什么这个例子失败了:

capitalize("abracadabra",[2,6,9,10])
#Output: AbRAcADAbRA - should be abRAcADAbRA

为什么我的第一封信突然变得大写?任何帮助都将深表感谢。

1 个答案:

答案 0 :(得分:4)

str.replace替换它找到的第一个匹配项。因此,s.replace(s[10], s[10].upper())a)不会替换索引10处的a,而是替换它在字符串中找到的第一个a

相反,将您的字符串转换为列表:

def capitalize(s, ind):
    split_s = list(s)
    for i in ind:
        try:
            split_s[i] = split_s[i].upper()
        except IndexError:
            print(f"Sorry, index is not in range! ({i})")
    return "".join(split_s)

print(capitalize("abracadabra",[2,6,9,10,50]))

输出:

  

抱歉,索引不在范围内! (50)

     

ABRACADABRA