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

Python中如何获取单词里重复大写字母的实际索引?

问题:提取单词中大写字母的正确索引

我需要找出单词中的大写字母,并将它们的索引存入新列表,示例输入输出如下:

InputOutput
pYtHoN[1, 3, 5]
CApiTAls[0, 1, 4, 5]

我编写了如下Python代码:

word = input()
word_list = list(word)

upper_case_list = []
for letter in word_list:
    if letter == letter.upper():
        upper_case_list.append(word_list.index(letter))

print(upper_case_list)

但输入CApiTAls时,输出为[0, 1, 4, 1],而非预期的[0, 1, 4, 5]——因为代码返回了重复大写字母A的首次出现索引1,而非实际索引5。请问如何修正代码以获取正确的实际索引?


修正方案

问题核心是list.index(letter)只会返回第一个匹配元素的索引,遇到重复字符就会出错。下面给你几种简单易懂的修正方法:

方法1:使用enumerate()遍历(最推荐)

enumerate()能在遍历字符串时同时返回当前字符的索引和内容,完美解决你的问题:

word = input()
upper_case_list = []
for idx, letter in enumerate(word):
    if letter.isupper():
        upper_case_list.append(idx)
print(upper_case_list)

这里用letter.isupper()判断大写比letter == letter.upper()更直观,而且字符串本身可以直接遍历,不需要转成列表。

方法2:手动维护索引计数器

如果不想用enumerate(),可以自己定义一个变量记录当前索引:

word = input()
word_list = list(word)
upper_case_list = []
current_idx = 0
for letter in word_list:
    if letter.isupper():
        upper_case_list.append(current_idx)
    current_idx += 1
print(upper_case_list)

每次循环后把current_idx加1,就能准确追踪每个字母的位置。

方法3:列表推导式(进阶简洁写法)

当你熟悉基础语法后,可以用列表推导式把代码压缩成一行:

word = input()
upper_case_list = [idx for idx, letter in enumerate(word) if letter.isupper()]
print(upper_case_list)

逻辑和方法1完全一致,只是写法更紧凑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 07:40:25