查找字符串列表中每个位置出现次数最多的字符
按位置统计高频字符的代码修复方案
问题根源
原代码循环次数取的是单词列表的长度(range(len(words))),而非所有单词中的最大长度,且未判断单词长度是否足够,直接访问item[i]导致短单词索引越界。
修正方案
核心思路:先确定需要处理的最大位置数(最长单词的长度),逐位置收集有效字符、统计频率,最后按「频率降序+字母序升序」选出目标字符。
修正后的代码
words = ['house', 'garden', 'kitchen', 'balloon', 'home', 'park', 'affair', 'kite', 'hello', 'portrait', 'angel', 'surfing'] maxOccurs = "" # 获取所有单词的最大长度,确定要处理的位置总数 max_length = max(len(word) for word in words) for i in range(max_length): char_counter = {} for word in words: # 仅处理长度覆盖当前位置的单词,避免索引越界 if i < len(word): char = word[i] char_counter[char] = char_counter.get(char, 0) + 1 # 按「出现次数降序,次数相同则字母序升序」排序,取首位字符 selected_char = sorted(char_counter.items(), key=lambda x: (-x[1], x[0]))[0][0] maxOccurs += selected_char print(maxOccurs) # 输出结果:hareennt
关键说明
- 确定循环范围:通过
max(len(word) for word in words)拿到最长单词的长度,确保覆盖所有可能的字符位置 - 避免索引越界:遍历单词时增加
i < len(word)的判断,跳过长度不足的单词 - 高效统计频率:用字典
char_counter直接记录每个字符的出现次数,比原代码的列表统计更高效 - 排序规则实现:
sorted的key参数用-x[1]实现次数降序,x[0]实现字母序升序,确保次数相同时选字母靠前的字符
内容的提问来源于stack exchange,提问作者MattMlgn
相关产品推荐
相关产品推荐

