Подтвердить что ты не робот

Создание сокращений в Python

В Python, как я могу сделать акроним данной строки?

Как, строка ввода:

'First Second Third'

Вывод:

'FST'

Я пытаюсь что-то вроде:

>>> for e in x:
        print e[0]

Но он не работает... Любые предложения о том, как это можно сделать? Я уверен, что есть правильный способ сделать это, но я не могу понять это. Нужно ли использовать re?

4b9b3361

Ответ 1

Try

print "".join(e[0] for e in x.split())

Ваша петля фактически перебирает все символы в строке x. Если вы хотите перебрать слова, вы можете использовать x.split().

Ответ 2

Если вы хотите использовать только capitals

>>>line = ' What AboutMe '
>>>filter(str.isupper, line)
'WAM'

Как насчет слов, которые могут не быть ведущими шапками.

>>>line = ' What is Up '
>>>''.join(w[0].upper() for w in line.split())
'WIU'

Что касается только слов Caps.

>>>line = ' GNU is Not Unix '
>>>''.join(w[0] for w in line.split() if w[0].isupper())
'GNU'

Ответ 3

Без re:

>>> names = 'Vincent Vega Jules Winnfield'
>>> ''.join(x[0] for x in names.split())
'VVJW'

Ответ 4

Теперь для чего-то немного другого...

words = "There ain't no such thing as a free lunch."
acronym = ''.join(word[0] for word in words.upper().split())
print acronym
# TANSTAAFL

(TANSTAAFL является довольно хорошо известным, BTW).

Ответ 5

s = 'First Second Third'
x = s.split(' ')
for e in x:
    print e[0]

должен сделать трюк.

Ответ 6

Также вы можете использовать

re.split('\W')

чтобы разделить строку/текст на символы, отличные от слова. Это может быть немного более надежным.

Ответ 7

Если вы хотите делать то, что грамматически правильно (независимо от языка), используйте title(), затем filter():

acronym = filter(str.isupper, my_string.title())

title() является довольно удивительным; он делает строку titlecased и является правильным в соответствии с locale.

Ответ 8

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

import re
words = "internet explorer 10"
print re.sub(r"([a-zA-Z])[a-z,A-Z]+\s*",r"\1",words).upper()

IE10