Python中如何获取单词里重复大写字母的实际索引?
问题:提取单词中大写字母的正确索引
我需要找出单词中的大写字母,并将它们的索引存入新列表,示例输入输出如下:
| Input | Output |
|---|---|
| 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
相关产品推荐
相关产品推荐

