关于Python字符统计代码中if y == y语句的功能疑问
问题解析:字符统计代码中的无效判断与冗余逻辑
先看你提供的这段字符统计代码:
text = input() dict = {} #your code goes here a = len(text) for x in range(a+1): for y in text: if y == y: dict[y] = text.count(y) print(dict)
关于if y == y:的疑问
这个判断完全是多余的——Python里正常的字符(以及绝大多数对象)必然满足自身等于自身,除非是特殊的NaN值,但字符不可能是NaN。所以这个条件永远为真,写不写都不影响代码执行,纯粹是无效的冗余语句。
你原本以为它是用来判断当前字符和上一个字符相同?但这段代码里根本没有记录上一个字符的逻辑,所以这个判断和你的猜想完全不沾边,就是个无意义的写法。
整个代码的其他冗余问题
除了这个无用的if判断,代码还有明显的性能浪费:
- 外层的
for x in range(a+1):循环完全没必要:不管循环多少次,内层循环都会把所有字符的统计结果重新赋值一遍,最终得到的字典和只跑一次内层循环的结果完全一致。比如输入"abcab",外层循环跑6次,但每次内层循环都会重复设置dict['a']=2、dict['b']=2、dict['c']=1,纯属于重复劳动。 - 用
text.count(y)统计效率极低:每次count(y)都会遍历整个字符串,假设字符串长度为n,内层循环跑n次,每次都遍历n次,时间复杂度是O(n²),字符串越长越慢。
优化后的字符统计写法
如果要实现字符统计,更高效清晰的写法有两种:
方法1:普通循环一次遍历统计
text = input() char_count = {} for char in text: if char in char_count: char_count[char] += 1 else: char_count[char] = 1 print(char_count)
只遍历字符串一次,时间复杂度O(n),逻辑直观易懂。
方法2:用Python内置工具collections.Counter
这是Python专门用于统计可哈希对象出现次数的工具,一行就能完成:
from collections import Counter text = input() print(Counter(text))
Counter内部做了高效的统计实现,是最推荐的简洁写法。
内容的提问来源于stack exchange,提问作者Jimmy Zeng
相关产品推荐
相关产品推荐

