为了账号安全,请及时绑定邮箱和手机立即绑定

使用Python中index()以外的方法将字符串中的每个第二个字母变成大写?

使用Python中index()以外的方法将字符串中的每个第二个字母变成大写?

波斯汪 2023-07-18 10:06:26
def myfunc(mylist = str):mystring = ''for x in mylist:    if mylist.index(x) % 2 == 0:        mystring = mystring + x.lower()    else:        mystring = mystring + x.upper()return mystringprint(myfunc('committee')) #Doesn't workprint(myfunc('ilovehoney')) #Does work我相信我的代码中的错误是index(),因为它无法识别字符串中的重复字母。有谁知道我可以使用不同的方法?第一个示例中的输出是“cOmmiTTEE”,但应该是“cOmMiTtEe”,而第二个示例中的输出是我想要的“iLoVeHoNeY”。虽然我不确定为什么我的函数在第二个示例中突然起作用。谢谢您的帮助。
查看完整描述

3 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

enumerate() 给出当前循环的索引:


s = 'committee'

"".join([x.upper() if i%2!=0 else x for i,x in enumerate(s)])

Out[4]: 'cOmMiTtEe'


查看完整回答
反对 回复 2023-07-18
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

您可以使用enumerate从可迭代对象中获取索引和值:


for idx, x in enumerate(mylist):

    if idx % 2 == 0:

        mystring = mystring + x.lower()

    else:

        mystring = mystring + x.upper()


查看完整回答
反对 回复 2023-07-18
?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

您根本不需要知道确切的索引。只需翻转一面旗帜即可:不-是-否-是-否-等等。


def myfunc(mylist):

    mystring = ''

    upper = False

    for x in mylist:

        mystring = mystring + (x.upper() if upper else x.lower())

        upper = not upper

    return mystring

请注意,以这种方式构造字符串效率很低(将“Shlemiel the Painter”搜索到谷歌)。改良版:


def myfunc(mylist):

    mychars = []

    upper = False

    for x in mylist:

        mychars.append(x.upper() if upper else x.lower())

        upper = not upper

    return ''.join(mychars)


查看完整回答
反对 回复 2023-07-18
  • 3 回答
  • 0 关注
  • 140 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信