You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何让enumerate遍历时不将空格计入索引计数

奇偶位字母大小写转换的空格计数问题修复

问题复现

目标需求:编写接收句子输入的函数,将偶数位置的字母转为大写,奇数位置的字母转为小写,非字母字符不参与位置计数。
原有实现代码:

def func(st):
    res = []
    for index, c in enumerate(st):
        if index % 2 == 0:
            res.append(c.upper())
        else:
            res.append(c.lower())
    return ''.join(res)
print(myfunc(something))

输入"Hello my guy"时,实际输出为"HeLlO My gUy",不符合预期输出"HeLlO mY gUy",根因是直接使用字符串整体索引做判断,空格被计入位置序号,打乱了字母本身的奇偶位排序;另外代码存在笔误:定义的函数名为func,调用时写为myfunc,会触发名称错误。

修复方案

单独维护仅对字母生效的位置计数器,遍历字符时对非字母字符直接原样保留、不更新计数器,仅在处理字母时根据计数器值做大小写转换,处理完成后更新计数器。
修复后可运行代码:

def func(st):
    res = []
    letter_index = 0  # 仅统计字母的位置计数器
    for c in st:
        # 非字母字符直接追加,不占用计数位
        if not c.isalpha():
            res.append(c)
            continue
        # 按字母的奇偶位置转换大小写
        if letter_index % 2 == 0:
            res.append(c.upper())
        else:
            res.append(c.lower())
        letter_index += 1
    return ''.join(res)

# 测试用例
print(func("Hello my guy"))

运行输出:

HeLlO mY gUy

逻辑说明

  • 处理Hello段时,5个字母依次按索引0-4转换,得到HeLlO,此时字母计数器值为5
  • 遇到第一个空格时直接追加,计数器保持5不变
  • 后续第一个字母m对应计数器值5(奇数位),转为小写m,计数器更新为6
  • 下一个字母y对应计数器值6(偶数位),转为大写Y,得到mY片段,和预期一致
  • 后续空格、guy段逻辑同理:空格不参与计数,字母按独立计数器值做大小写转换,最终输出完全符合要求。

内容的提问来源于stack exchange,提问作者Somebody

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 03:03:26