Как вы определяете, находится ли слово в алфавитном порядке в python?

Я действительно не знаю, как это сделать. Пока все, что у меня есть, это:

alphabet = 'abcdefghijklmnopqrstuvwxyz' 

Я должен пройти текстовый файл и подсчитать количество слов в алфавитном порядке. Я не могу

 if word in alphabet: 

потому что это требует, чтобы слово действительно имело все эти буквы в порядке.

Чтобы уточнить: «удар» пройдет тест, а «сосать» – нет. У меня есть список тысяч слов, мне нужно пройти весь список и подсчитать количество слов, которые находятся в алфавитном порядке. Извините за любую раннюю путаницу.

3 Solutions collect form web for “Как вы определяете, находится ли слово в алфавитном порядке в python?”

Очень просто:

 >>> alphabet = 'abcdefghijklmnopqrstuvwxyz' >>> list(alphabet) == sorted(alphabet) True >>> list('blow') == sorted('blow') True >>> list('suck') == sorted('suck') False 

Знаем, что мы можем определить предикат, который нам нужен:

 >>> alphabetical = lambda w: list(w.lower()) == sorted(w.lower()) 

И примените его к списку:

 >>> lst = ['blow', 'suck', 'abc'] >>> filter(alphabetical, lst) ['blow', 'abc'] 

Оттуда это не большой шаг к подсчету результатов. Есть еще несколько вещей, которые нужно учитывать:

  • Сортировка O(n*log n) , хотя эта проблема может быть легко решена в O(n) . Это, вероятно, хорошо, потому что слова обычно имеют ограниченное количество символов и sorted в C и, таким образом, очень быстро
  • Если вам действительно нужна эффективность, вы можете даже использовать sum(1 for w in w if ...) trick, которая использует выражение генератора вместо построения списка.

У меня такое чувство, что это домашнее задание, поэтому я собираюсь дать алгоритм, а не код для копирования.

Подход, который я хотел бы сделать, это разделить текстовый файл на массив отдельных слов.

Затем для каждого слова передайте его в предикат, который выполняет следующее:

  1. Преобразует строку в нижний регистр
  2. Разделяет слово в массив символов.
  3. Итерации по массиву символов, начиная с символа SECOND
  4. Проверьте, если символ [x]> = символ [x-1]. Если нет, верните false
  5. Если вам удастся выйти из цикла итерации без сбоев, верните true.

Затем просто увеличивайте счетчик каждый раз, когда предикат возвращает true.

 word = word.upper() all(x <= y for x, y in zip(word, word[1:])) 
  • Есть ли библиотека, которая будет определять язык исходного кода блока кода?
  • GAE и Facebook Connect: как получить возраст и пол пользователя?
  • Как мутировать неоднородное свойство ndb?
  • Тип теста элементов python tuple / list
  • Решить путь обнаружения на модуле App Engine
  • Удаление нескольких файлов, соответствующих шаблону
  • Запуск сценариев Python внутри Android Studio
  • Разделение строки на основе поискового запроса в Python?
  • Как перезаписать предыдущую печать на stdout в python?
  • как сравнить 2 json в python
  • Импорт модулей Python из разных рабочих каталогов
  • Python - лучший язык программирования в мире.