Отметьте наиболее часто встречающиеся буквы в слове. питон - PullRequest
0 голосов
/ 06 ноября 2018

Моя задача:

Чтобы написать функцию, которая получает строку в качестве аргумента и возвращает букву (буквы) с максимальным появлением в ней.

Пример 1:

s = 'Astana'

Выход:

a

Пример 2:

s = 'Kaskelen'

Выход:

ke

Пока у меня есть код (нажмите, чтобы запустить):

a = input()


def most_used(w):

    a = list(w)
    indexes = []
    g_count_max = a.count(a[0])

    for letter in a:
        count = 0
        i = int()
        for index in range(len(a)):
            if letter == a[index] or letter == a[index].upper():
                count += 1
                i = index
        if g_count_max <= count:       //here is the problem.
            g_count_max = count
            if i not in indexes:
                indexes.append(i)


    letters = str()

    for i in indexes:
        letters = letters + a[i].lower()

    return letters

print(most_used(a))

Проблема в том, что он автоматически добавляет первую букву в массив, потому что сумма появления первого элемента фактически равна начальной точке появления (которая в основном является первым элементом).

Пример 1:

s = 'hheee'

Выход:

he

Пример 2:

s = 'malaysia'

Выход:

ma

Ответы [ 4 ]

0 голосов
/ 06 ноября 2018

Также вы можете импортировать Counter lib:

from collections import Counter

a = "dagsdvwdsbd"

print(Counter(a).most_common(3)[0][0])

Затем возвращается:

d
0 голосов
/ 06 ноября 2018

попробуйте этот код, используя списочные выражения:

word = input('word=').lower()
letters = set(list(word))
max_w = max([word.count(item) for item in letters])
out = ''.join([item for item in letters if word.count(item)==max_w])
print(out)
0 голосов
/ 06 ноября 2018

Вы можете использовать словарь для понимания списка и max():

s = 'Kaskelen'

s_lower = s.lower() #convert string to lowercase

counts = {i: s_lower.count(i) for i in s_lower}

max_counts = max(counts.values()) #maximum count

most_common = ''.join(k for k,v in counts.items() if v == max_counts)

Урожайность:

'ke'
0 голосов
/ 06 ноября 2018

Я думаю, что вы пытаетесь значительно упростить использование стандартной библиотеки Counter object

from collections import Counter
def most_used(word):
    # this has the form [(letter, count), ...] ordered from most to least common
    most_common = Counter(word.lower()).most_common()
    result = []
    for letter, count in most_common:
        if count == most_common[0][1]:
            result.append(letter) # if equal largest -- add to result
        else:
            break  # otherwise don't bother looping over the whole thing
    return result  # or ''.join(result) to return a string
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...