3 回答
TA贡献1802条经验 获得超5个赞
首先创建一个字母来计数映射,然后反转这个映射。使用collections模块:
from collections import defaultdict, Counter
text = 'theerrrdd'
# create dictionary mapping letter to count
letter_count = Counter(text)
# reverse mapping to give count to letters mapping
count_letters = defaultdict(list)
for letter, count in letter_count.items():
count_letters[count].append(letter)
结果:
print(count_letters)
defaultdict(<class 'list'>, {1: ['t', 'h'],
2: ['e', 'd'],
3: ['r']})
然后,例如,count_letters[2]为您提供在输入字符串中出现两次的所有字母。
使用str.count在一个循环是低效的,因为它需要你的字符串的完全重复每个字母。换句话说,这样的算法具有二次复杂度,而collections.Counter具有线性复杂度。
TA贡献1784条经验 获得超8个赞
另一种方法是使用set()仅获取字符串中的唯一字符,遍历集合并创建一个字典,其中计数是每个计数的字符列表的键。然后,您可以使用 为每个计数生成字符串join()。
text = "theerrrdd"
chars = set(text)
counts = {}
for ch in chars:
ch_count = text.count(ch)
if counts.get(ch_count, None):
counts[ch_count].append(ch)
else:
counts[ch_count] = [ch]
# print string of chars where count is 2
print(''.join(counts[2]))
# OUTPUT
# ed
TA贡献1780条经验 获得超4个赞
我认为最简单的解决方案!
from collections import Counter
text = "theerrrdd"
count = Counter(text)
same_value = ''.join([k for k in count.keys() if count[k] > 1])
print(count)
print(same_value)
添加回答
举报