我一直在尝试用一个函数将字符串中的偶数字母变成大写,将奇数字母变成小写,如下所示:
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)