如何统计列表中单词不同位置指定字母的出现频率?
问题分析与修复代码
先拆解你代码里导致索引越界和逻辑混乱的问题:
- 你在
for s in b循环里先写了s3[i] = s2,但这时候变量i还没定义,属于无效操作; s2初始是空列表,直接访问s2[j]时,空列表没有对应位置的元素,必然触发索引越界;- 统计逻辑完全颠倒,没有先给每个位置初始化计数为0,上来就想累加,根本没有基础值支撑。
正确实现思路
- 先确定所有单词的长度(假设你的输入单词长度一致,示例里都是3);
- 给每个要统计的字母初始化一个全0的计数列表,长度和单词长度一致;
- 遍历每个单词,再逐个位置检查,若当前位置的字母是目标字母,就把对应位置的计数加1;
- 最后把每个字母和它的计数列表对应起来。
修复后的代码
a = ['ram', 'rah', 'arj'] letters = ['r', 'm'] # 取第一个单词的长度作为统一长度(假设所有单词长度相同) word_length = len(a[0]) # 初始化结果字典:每个字母对应一个全0的计数列表 freq_result = {char: [0]*word_length for char in letters} for word in a: for idx, char in enumerate(word): # 如果当前字符在统计列表内,对应位置计数+1 if char in freq_result: freq_result[char][idx] += 1 # 输出预期格式的结果 for char, counts in freq_result.items(): print(f"字母{char}的频率是{counts}")
运行结果
字母r的频率是[2, 1, 0] 字母m的频率是[0, 0, 1]
这个代码逻辑清晰,先给每个位置的计数打好基础,再逐个统计,完全符合需求,也不会出现索引越界问题。
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

