如何用Python for循环统计列表各数字出现次数并生成计数列表
问题分析
你当前编写的代码存在两处核心逻辑错误:
- 仅对同步递增的索引
i和q对应的元素做对比,只能匹配相邻相等的元素,无法统计全列表内同一个数字的总出现次数 - 每次匹配成功就直接向结果列表追加计数,输出列表长度和原列表一致,并非去重后的各数字计数结果
实现思路
在不使用count()、collections.Counter等现成计数工具的前提下,仅用for循环实现的步骤如下:
- 遍历原列表,筛选出所有不重复的数字
- 对每一个不重复的数字,再次遍历全列表统计它的出现次数
- 把所有统计到的次数汇总为最终的计数列表
可运行代码实现
def countlisting(numberlist): # 第一步:用for循环实现去重,获取所有不重复数字 unique_nums = [] for num in numberlist: exist_flag = False for existed in unique_nums: if num == existed: exist_flag = True break if not exist_flag: unique_nums.append(num) # 第二步:统计每个不重复数字的出现次数 count_result = [] for target in unique_nums: cnt = 0 for num in numberlist: if num == target: cnt += 1 count_result.append(cnt) return count_result the_numberlist = [9,18,13,9,6,6,16,6,17,10,15,16,13,11,13,8,20,6,18,11] print(countlisting(the_numberlist))
运行后输出为:[2, 2, 3, 4, 2, 1, 1, 1, 2, 1, 1],和预期输出格式一致,对应去重后每个数字的出现次数。
内容的提问来源于stack exchange,提问作者August
相关产品推荐
相关产品推荐

