сортировка python
x = input()
def lcount():
print('Сколько раз встречается каждый знак: ')
for i in set(x):
print(i, x.count(i), sep=' - ')
Как отсортировать те символы, которые будут выводится из слова которое принимает инпут, в алфавитном порядке? т.е если ввести слово хорошо, то выдаст Сколько раз встречается каждый знак: о - 3 х - 1 р - 1 ш - 1
Как сделать что бы буквы выводились в алфавитном порядке ?
Ответы (1 шт):
Ответ на вопрос: вместо set(x) напишите sorted(set(x)), а именно:
x = input()
def lcount():
print('Сколько раз встречается каждый знак: ')
for i in sorted(set(x)):
print(i, x.count(i), sep=' - ')
Однако я бы хотел порекомендовать Вам использовать такую вещь, как аргументы функции - это полезно для улучшения читаемости и поддержки кода:
user_data = input()
def lcount(x):
print('Сколько раз встречается каждый знак: ')
for i in sorted(set(x)):
print(i, x.count(i), sep=' - ')
lcount(user_data)
Также хочу заметить, что данный код - неэффективен, а именно асимптотика этого кода в худшем случае равна O(n^2), потому как мы пробегаемся по списку и каждый раз, вызывая метод .count мы пробегаемся по нему ещё раз. Можете обратиться к Counter из модуля collections, который имеет асимптотику O(n)
Также предлагаю Вам не выводить результат сразу на экран, а делать это в другой функции - это позволит делегировать "обязанности" функций
Итак, финальный код без использования Counter может выглядеть так:
user_data = input()
def lcount(x):
res = []
for i in sorted(set(x)):
res.append((i, x.count(i)))
return res
def print_answer(x):
print('Сколько раз встречается каждый знак: ')
for i, count in x:
print(i, count, sep=' - ')
answer = lcount(user_data)
print_answer(answer)
С использованием:
from collections import Counter
user_data = input()
def lcount(x):
c = Counter(x)
return c
def print_answer(x):
print('Сколько раз встречается каждый знак: ')
for i, count in sorted(x.items()): # <<<<<<<<<<< тут код немного поменялся. обращаю внимание
print(i, count, sep=' - ')
answer = lcount(user_data)
print_answer(answer)