Python挑战练习-进阶挑战49
编写一个程序来计算字符串中重复出现多次的不同字符的数量。
例如,在单词Programming
中:
-
r 重复出现了2次
-
g 重复出现了2次
-
m 重复出现了2次
由于3个不同的字符重复出现多次,因此重复字符的数量为3。
-
定义函数
count_duplicate_chars()
,参数为input_string
。 -
在函数内部,计算并返回字符串中重复字符的数量。
分析:①返回的是一个数量,所以想到可以返回len( )
②可通过for循环遍历,把重复出现的字符添加到一个新的列表(这里需要去重复的操作),然后再求这个列表长度
def count_duplicate_chars(input_string):
# 在此处编写你的代码
result=[]
for ch in input_string:
if input_string.count(ch)>=2:
result.append(ch)
re=list(set(result))
return len(re)
# 获取用户输入
test_string = input()
# 调用函数
result = count_duplicate_chars(test_string)
print(result)
代码解释:
-
re = list(set(result))
:-
set(result)
:将result
列表转换为一个集合。集合的特点是元素不重复,所以重复的字符会被自动去除。例如,如果result
列表包含['a', 'a', 'b', 'b']
,将其转换为集合后会变成{'a', 'b'}
。 -
list(set(result))
:将集合转换回列表。这是因为集合是无序且不支持索引访问的,而列表是有序且支持索引访问的,将集合转换为列表可以方便后续操作或符合某些返回结果的要求。
-
代码潜在问题:
对于较长的字符串,input_string.count(ch)
在 for
循环中对每个字符都要对整个字符串进行计数操作,这可能会导致性能下降,因为 count()
方法每次调用都要遍历整个字符串。可以使用字典存储字符计数,这样可以避免重复计数,提高性能。
好处:只对输入字符串进行一次遍历,而不是对每个字符都进行多次计数操作
def count_duplicate_chars(input_string):
char_count = {}
for ch in input_string:
char_count[ch] = char_count.get(ch, 0) + 1
result = [ch for ch, count in char_count.items() if count >= 2]
return len(set(result))
代码解释:
-
char_count = {}
:创建一个空字典char_count
用于存储每个字符及其出现的次数。 -
for ch in input_string:
:遍历输入字符串,对于每个字符ch
,使用char_count.get(ch, 0) + 1
来更新字符的计数,如果字符不在字典中,其初始计数为 0,然后加 1。 -
result = [ch for ch, count in char_count.items() if count >= 2]
:使用列表推导式找出出现次数大于或等于 2 的字符。