Python Forum
Trying to get the first letter of every word in a list - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: Trying to get the first letter of every word in a list (/thread-31822.html)



Trying to get the first letter of every word in a list - DanielCook - Jan-05-2021

I am trying to take out the first letter of every word in a list. It is not working. I believe the fault to be on line 9 but i can't figure out why.

def initialise(userText):
    lst = []
    firstLetters = []
    for i in userText:
        lst.append(i)
    firstLetters.append(lst[0])
    for x in lst:
        if x == " ":
            position = lst.index(x) + 1
            firstLetters.append(lst[position])
    userText = ''.join(firstLetters)
    return userText


text = input("Enter text: ")
print(initialise(text))



RE: Trying to get the first letter of every word in a list - perfringo - Jan-05-2021

Isin't the objective to get first letter of every word in a string? If this is the case then simple 'split on space and get first letter' comprehension would do:

>>> text = 'Life, Universe and Everything'
>>> ''.join(word[0] for word in text.split())
'LUaE'



RE: Trying to get the first letter of every word in a list - deanhystad - Jan-05-2021

Getting back to the original post question, index() will not work because you can have repeating letters. You could use enumerate to iterate through the user text.
def initialise(userText):
    firstLetters = userText[0]
    for index, letter in enumerate(userText):
        if letter == " ":
            firstLetters += userText[index+1]
    return firstLetters
A problem with this approach is it assumes the next letter after a space is the start of a word. This fails for us older folks who follow a period with two spaces, and it would crash if you entered a trailing space.

A safer solution is to set a flag to let you know that you are in a break and looking for the start of the next word.
def initialise(userText):
    punctuation = ' .,:;()"'
    firstLetters = ''
    start = True
    for letter in userText:
        if letter in punctuation:
            start = True
        elif start:
            firstLetters += letter
            start = False
    return firstLetters
 
print(initialise('This is a test.  It works for (some) punctuaton.'))