Python mapредставьте длину самого длинного слова и покажите самые длинные слова

#python #hadoop #mapreduce

Вопрос:

Я пытаюсь использовать принципы MapReduce с Python, чтобы сначала отобразить отдельный список слов из текста с их количеством символов, а затем уменьшить, чтобы отобразить самые длинные слова и их количество символов.

Смотрите визуальное объяснение Ввод простой text.txt файл с 3 предложениями. Смотрите ниже мой картограф:

 #MAPPER #!/usr/bin/python import sys for line in sys.stdin:  for word in line.strip().split():  print(str(len(word))   't'   word)  

Спасибо, что помогли с редуктором. Требуемый результат: «Самые длинные слова в этом тексте-xxxxxxxxx и ггггггг с xx символами».

Комментарии:

1. Было бы здорово предоставить пример ввода и ожидаемый результат (с этой целью лучше изменить свой код, чтобы использовать список строк здесь в качестве входных данных, а не sys.stdin )

2. Вы , конечно, можете создать список кортежей (len(word), word) , затем отсортировать их в порядке убывания и распечатать несколько лучших. Это то, что тебе нужно?

3. @Tim если вы работаете со сколь угодно длинным вводом, лучше вычислять минимальное/максимальное значение по ходу (т. Е. проверьте для каждой итерации, является ли значение ниже/выше, и замените). Это более эффективно для памяти, чем сбор всего, и более эффективно для вычислений, чем сортировка всего. 😉

4. @mozway Я отредактировал с требуемым результатом спасибо!

5. @TimRoberts, как объясняет Мозуэй, я думаю, что здесь лучше использовать» макс ()», » лен ()».

Ответ №1:

Это делает то, о чем вы просите. При этом сохраняются только 5 лучших слов, что значительно облегчает сортировку. «Печать» в цикле предназначена только для отладки и может быть удалена.

 import sys top5 = [] for line in sys.stdin:  for word in line.strip().split():  top5.append( (len(word),word) )  top5.sort( reverse=True )  top5 = top5[:5]  print(top5) print( "Top 5 words by length are:" ) print(top5)