Схватив самое дублированное письмо из строки - PullRequest
0 голосов
/ 06 февраля 2020

То, чего я хочу добиться, - это алгоритм, который находит наиболее дублированную букву из всего списка строк. Я новичок в Python, поэтому мне понадобилось около двух часов, чтобы добраться до этой стадии. Проблема с моим текущим кодом состоит в том, что он возвращает каждое дублированное письмо, когда я ищу только самое дублированное письмо. Кроме того, я хотел бы узнать о более быстром способе, который не использует два цикла for.

Код:

rock_collections = ['aasdadwadasdadawwwwwwwwww', 'wasdawdasdasdAAdad', 'WaSdaWdasSwd', 'daWdAWdawd', 'QaWAWd', 'fAWAs', 'fAWDA']

seen = []
dupes = []

for words in rock_collections:
  for letter in words:
    if letter not in seen:
      seen.append(letter)
    else:
      dupes.append(letter)

print(dupes)

1 Ответ

0 голосов
/ 06 февраля 2020

Если вы ищете букву, которая появляется наибольшее количество раз, я бы порекомендовал следующий код:

def get_popular(strings):
    full = ''.join(strings)
    unique = list(set(full))
    return max(
        list(zip(unique, map(full.count, unique))), key=lambda x: x[1]
    )


rock_collections = [
    'aasdadwadasdadawwwwwwwwww',
    'wasdawdasdasdAAdad',
    'WaSdaWdasSwd',
    'daWdAWdawd',
    'QaWAWd',
    'fAWAs',
    'fAWDA'
]
print(get_popular(rock_collections))  # ('d', 19)

Позвольте мне разбить код для вас:

full содержит каждую из строк вместе с без букв между ними. set(full) создает набор, то есть он содержит каждую уникальную букву только один раз . list(set(full)) превращает это обратно в список, что означает, что он сохраняет порядок, когда вы перебираете элементы в наборе.

map(full.count, unique) перебирает каждую уникальную букву и подсчитывает, сколько их в строка. zip(unique, ...) ставит эти цифры с соответствующими буквами. key=lambda x: x[1] - это способ сказать: не принимайте максимальное значение кортежа, вместо этого принимайте максимальное значение второго элемента кортежа (то есть, сколько раз появляется буква). max находит наиболее распространенную букву, используя вышеупомянутый ключ.

...