Сортировка на Python по кол-ву символов для строки без пробелов
import seaborn as sns
import matplotlib.pyplot as plt
f=open("Nabokov.txt")
x=f.read()
c=[]
b=[' ','(', ')', '{', '}', '[', ']', ':', ';', '"', "'", '<', '>', ',', '.', '?', '!','-', '@', '#', '$', '%', '^', '&', '*', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0']
for i in range(len(b)):
if b[i] in x:
x=x.replace(b[i],"")
x=x.upper()
**x = ''.join(sorted(x,))**
print(x)
print(len(x))
a=['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
for i in range(26):
print(x.count(a[i]),"=",a[i],";",(x.count(a[i])/len(x))*100)
c.append(x.count(a[i]))
sns.barplot(x=a, y=c)
plt.show()
Та строчка которую я выделил сортирует строку. Но сортирует не так ка нужно мне.
Пример [addbddbbggac]
Вывод [ddddbbbggaac]
Это то как мне нужно.
Как сортирует он
Вывод [aabbbcddddgg]
Помогите пожалуйста
Ответы (2 шт):
Автор решения: CrazyElf
→ Ссылка
Можете через Counter
посчитать кол-во каждого из символов и сгенерить строку заново на основании этого счётчика от самого частого символа до самого редкого. Пример:
from collections import Counter
text = "addbddbbggac"
result = ''.join(ch*cnt for ch,cnt in Counter(text).most_common())
print(result)
Вывод:
ddddbbbaaggc
Автор решения: Alexey Trukhanov
→ Ссылка
Можно использовать встроенный метод .count() для сортировки по частотности. И затем пересобрать строку по частоте.
lst = 'addbddbbggac'
st = ''.join(ch * lst.count(ch) for ch in sorted(set(lst), key=lst.count, reverse=True))
print(st)