我一直在尝试用一个函数将字符串中的偶数字母变成大写,将奇数字母变成小写,如下所示:

def myfunc('apple'):
    #OUTPUTS: 'ApPlE'

这是我做的:
def myfunc(mystring):
    stringList = [letter for letter in mystring]
    for letter in stringList[1::2]:
        stringList[stringList.index(letter)] = letter.lower()
    for letter in stringList[::2]:
        stringList[stringList.index(letter)] = letter.upper()
    return ''.join(stringList)

我相信,当我使用像“apple”这样有两个相同字母的单词时,如果我的单词是apple,index()函数只能设法给我第一个“p”的索引。
它返回:
'APplE'

我该怎么解决?

最佳答案

通过迭代字符串的索引,使用内置函数enumerate,以及字符串的字符(字符串也可以是iterable):

def myfunc(mystring):
    out = []
    for i, c in enumerate(mystring):
        if i % 2 == 0:
            out.append(c.upper())
        else:
            out.append(c.lower())
    return "".join(out)

示例输出:
>>> myfunc('apple')
'ApPlE'

这也更有效,因为它只在字符串上迭代一次。您的代码重复多次(每个stringList.index调用对字母进行线性搜索)。
如果您想让它更难阅读,但要重新使用已有的内容,也可以使用它,但我不建议这样做(因为它在字符串上重复三次,一次生成列表,然后两次替换字符):
def myfunc(mystring):
    stringList = list(mystring)
    stringList[::2] = map(str.upper, stringList[::2])
    stringList[1::2] = map(str.lower, stringList[1::2])
    return "".join(stringList)

09-09 21:59
查看更多