Ответ 1
Try
print "".join(e[0] for e in x.split())
Ваша петля фактически перебирает все символы в строке x
. Если вы хотите перебрать слова, вы можете использовать x.split()
.
В Python, как я могу сделать акроним данной строки?
Как, строка ввода:
'First Second Third'
Вывод:
'FST'
Я пытаюсь что-то вроде:
>>> for e in x:
print e[0]
Но он не работает... Любые предложения о том, как это можно сделать? Я уверен, что есть правильный способ сделать это, но я не могу понять это. Нужно ли использовать re
?
Try
print "".join(e[0] for e in x.split())
Ваша петля фактически перебирает все символы в строке x
. Если вы хотите перебрать слова, вы можете использовать x.split()
.
Если вы хотите использовать только 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'
Без re
:
>>> names = 'Vincent Vega Jules Winnfield'
>>> ''.join(x[0] for x in names.split())
'VVJW'
Теперь для чего-то немного другого...
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).
s = 'First Second Third'
x = s.split(' ')
for e in x:
print e[0]
должен сделать трюк.
Также вы можете использовать
re.split('\W')
чтобы разделить строку/текст на символы, отличные от слова. Это может быть немного более надежным.
Если вы хотите делать то, что грамматически правильно (независимо от языка), используйте title()
, затем filter()
:
acronym = filter(str.isupper, my_string.title())
title()
является довольно удивительным; он делает строку titlecased и является правильным в соответствии с locale.
Здесь, как сделать аббревиатуру с регулярным выражением, оставляя числа как есть:
import re
words = "internet explorer 10"
print re.sub(r"([a-zA-Z])[a-z,A-Z]+\s*",r"\1",words).upper()
IE10