构建以字符位置为键、对应0出现次数为值的字典:代码错误排查
问题分析与解决方案
你的代码主要有两个核心问题,导致输出不符合预期:
1. 位置计数器ctr没有在每个单词循环前重置
你把ctr=1放在了整个循环外面,处理完第一个单词后ctr会持续累加,处理第二个单词时位置会从8开始(而非重新从1计数),完全打乱了字符和位置的对应关系。
2. 未初始化所有位置的默认计数为0
你的代码只统计了出现过0的位置,那些没有0的位置(比如例子里的5、6、7位)不会被加入字典,自然无法显示5:0这类结果。
修正后的代码
我们可以用enumerate直接获取每个字符的位置(设置从1开始计数,匹配你的需求),先初始化好所有位置的默认值为0,再逐个统计:
string_list = ["0000NNN", "000ANNN"] # 假设所有字符串长度一致,先获取长度 str_length = len(string_list[0]) # 初始化字典,位置从1到str_length,默认值0 my_dict = {pos: 0 for pos in range(1, str_length + 1)} for word in string_list: # 用enumerate获取从1开始的位置和对应字符 for pos, letter in enumerate(word, start=1): if letter == "0": my_dict[pos] += 1 print(my_dict)
测试结果
运行这段代码后,输出完全符合你的预期:{1: 2, 2: 2, 3: 2, 4: 1, 5: 0, 6: 0, 7: 0}
额外说明
如果你的字符串列表里存在不同长度的字符串,可以先确认最长长度,再基于最长长度初始化字典;或者根据需求只统计到最短字符串的长度,按需调整即可。从你的例子来看,所有字符串长度一致,上面的代码就足够啦。
内容的提问来源于stack exchange,提问作者Cyber_Tron
相关产品推荐
相关产品推荐

