Python: использовать первый символ слов в строке, кроме одного слова - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть строка a = 'thirteen thousand and forty six'.Переменная a всегда будет содержать некоторое количество слов.Я хочу использовать первые буквы каждого слова в строке, кроме конкретного слова 'and'.Вот мой код, который работает полностью:

b = []
for i in a.split():
    if i.lower() == 'and':
        b.append(i.lower())
    else:
        b.append(i.capitalize())
aa = " ".join(b)    #'Thirteen Thousand and Forty Six'

Еще один фрагмент oneliner, который я пробовал:

aa = " ".join([k.capitalize() for k in a.split() if k.lower() != 'and'])

, но возвращает 'Thirteen Thousand Forty Six' в качестве результирующей строки, пропуская слово'and'.

Вопрос в том, существуют ли какие-либо возможные варианты, использующие понимание списка или некоторые встроенные функции (без использования регулярных выражений) для этой работы?

Ответы [ 4 ]

0 голосов
/ 19 февраля 2019

Следующий фрагмент может быть полезен, он просто дает желаемый результат в однострочном коде Python:

s = 'thirteen thousand and forty six'
print(s.title().replace('And', 'and'))
0 голосов
/ 08 февраля 2019

Вместо разделения по умолчанию (split()), почему бы не разделить на "и", а также повторно объединить, используя "и"?

aa = " and ".join([word.capitalize() for word in a.split(" and ")])
0 голосов
/ 08 февраля 2019

Вы можете просто заменить "И на и" после заглавных букв

a = 'thirteen thousand and forty six'
(' ').join([x.capitalize() for x in a.split(' ')]).replace('And', 'and')
0 голосов
/ 08 февраля 2019

Правильный синтаксис должен быть

aa = " ".join([k.capitalize() if k.lower() != 'and' else k for k in a.split()])

Когда вы ставите предложение if в конце понимания, оно пропустит элементы, которые не удовлетворяют условию.Однако вы должны дословно вернуть товар, когда он равен "and".

...