Python统计相等元素对时报TypeError: 'NoneType' object is not subscriptable
报错根因
- 核心错误点:Python列表的
append()是原地修改方法,没有返回值(默认返回None)。你在循环中执行了list2 = list3.append(list2[a])、list2 = list3.append("")操作,直接把原本是列表的list2覆盖成了None,下一轮循环执行list2[a]尝试下标访问时,就触发了TypeError: 'NoneType' object is not subscriptable报错。 - 额外逻辑问题:你当前的统计逻辑存在重复计数问题,同一个元素每被遍历到一次就会加一次
count//2,最终统计的对数会远大于实际值;同时你通过替换空串标记已统计元素的实现方式冗余且易出问题。
修复方案
直接用collections.Counter统计每个元素的出现次数,再批量计算总对数,逻辑简洁不易出错,代码如下:
from collections import Counter list1 = input("Введите список: ") list2 = list1.split() counter = 0 # 统计每个元素的出现次数 count_result = Counter(list2) for cnt in count_result.values(): # 每个元素能组成的对数是 出现次数//2 counter += cnt // 2 print(list2) print(counter)
运行示例
输入:a a b b c d d d
输出:
['a', 'a', 'b', 'b', 'c', 'd', 'd', 'd'] 3
解释:a1对、b1对、d1对,总共3对,结果符合预期
内容的提问来源于stack exchange,提问作者369
相关产品推荐
相关产品推荐

