如何修正代码,找出字符串中重复单词及其两次出现的位置?
修正重复单词位置输出的代码方案
问题根源
你当前的代码会遍历每个单词,只要检测到该单词重复就打印一次单词和当前索引,导致同一个重复单词被多次输出(比如示例中的tea会在两个位置分别输出一次),不符合只输出一次单词+所有位置的需求。
修正方案
改用字典统一收集每个单词的所有位置,之后筛选出有多个位置的单词,一次性输出单词和对应的所有位置。以下是两种索引计数版本的代码:
1. 1-based位置(从1开始计数)
string = input().strip() word_list = string.split() # 用字典存储每个单词对应的所有位置 word_positions = {} for idx, word in enumerate(word_list, start=1): if word not in word_positions: word_positions[word] = [] word_positions[word].append(idx) # 输出重复单词及其所有位置 for word, positions in word_positions.items(): if len(positions) > 1: print(f"{word} {' '.join(map(str, positions))}")
测试输入juice bread tea water apple tea carrot coconut,输出为:tea 3 6(注:你给出的期望输出tea 1 4与输入单词位置不匹配,推测是输入示例或期望输出笔误,此代码逻辑为标准1-based位置计数)
2. 0-based位置(与你现有代码的索引逻辑一致)
string = input().strip() word_list = string.split() word_positions = {} for idx, word in enumerate(word_list): if word not in word_positions: word_positions[word] = [] word_positions[word].append(idx) for word, positions in word_positions.items(): if len(positions) > 1: print(f"{word} {' '.join(map(str, positions))}")
测试输入同上,输出为:tea 2 5,解决了原代码重复打印单词的问题。
内容的提问来源于stack exchange,提问作者Badgerator
相关产品推荐
相关产品推荐

