Преобразование целых чисел в строке в слова в понимании списка - PullRequest
2 голосов
/ 01 ноября 2019

У меня есть строка, содержащая целые числа, и я пытаюсь понять, как преобразовать их в слова (т.е. 100 в сотню). Я успешно использую пакет inflect в отдельных случаях, однако я изо всех сил пытаюсь найти правильное решение, которое позволило бы мне оставить предложение как есть, кроме целочисленного преобразования.

Это то, что у меня есть в настоящее время:

mysent = ['this','is','1','of','my','sentences']

, и вот что я хочу закончить:

mysent = ['this','is','one','of','my','sentences']

Пока я пробовал следующее, который удаляет все слова, кроме целого числа.

import inflect
p = inflect.engine()

mysent = [p.number_to_words(token) for token in mysent if token.isdigit() is True]

Я также попробовал нижеприведенное, что, как я думал, могло бы решить проблему, но выдает синтаксическую ошибку:

mysent = [p.number_to_words(token) for token in mysent if token.isdigit() is True else token for token in mysent]

Ответы [ 2 ]

3 голосов
/ 01 ноября 2019

Когда вы пишете if после for в понимании списка, вы фильтруете список, исключая те элементы, для которых условие ложно. Это означает, что вы исключаете нечисловые слова, а это не то, что вам нужно.

Вместо этого вы должны написать p.number_to_words(token) if token.isdigit() else token, чтобы включить преобразование или исходный токен в итоговый список, в зависимости отусловие. Полное понимание выглядит следующим образом:

mysent = [p.number_to_words(token) if token.isdigit() else token for token in mysent]

Кстати, предполагая, что token.isdigit() возвращает либо True, либо False, избыточно писать is True.

3 голосов
/ 01 ноября 2019

Вы можете использовать троичный оператор Python :

result = [p.number_to_words(token) if token.isdigit() else token for token in mysent]

print(result)

Выход

['this', 'is', 'one', 'of', 'my', 'sentences']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...