Home > Enterprise >  How do i reference a character in a string within a list with python
How do i reference a character in a string within a list with python

Time:03-09

I seem to have trouble with this code, keeps on telling me how my list indices must be integers or slices, not strings. Its a program that essentially makes a phrase into an capitalized acroynm IE. universal serial bus = USB

    words = phrase.split()
    result = ""
    for word in words:
        result  = words[word][0]
    return result.upper()
print(initials("Universal Serial Bus")) # Should be: USB
print(initials("local area network")) # Should be: LAN
print(initials("Operating system")) # Should be: OS

How do I correctly reference the character in the string.

CodePudding user response:

The problem is that the for loop doesn't yield the index, but the value.

for word in words:
    # word is not the index
    # its not an integer

You can use enumerate to get the index.

for index, word in enumerate(words):
    # index is an iteger
    # word is the value

However, since you have the word already at hand. You may not even need to use the index at all.

result  = word[0]

CodePudding user response:

The Fix

You're just one line off. It should be:

def initials(phrase):
    words = phrase.split()
    result = ""
    for word in words:
        result  = word[0] # correction is here
    return result.upper()
print(initials("Universal Serial Bus")) # Should be: USB
print(initials("local area network")) # Should be: LAN
print(initials("Operating system")) # Should be: OS

Explanation

word is an individual word from your string of words (i.e. "Universal" from "Universal Serial Bus"). The first index ([0]) is the first letter that you're looking for (i.e. "U" out of "Universal").

words[word][0] translates to something like "Universal Serial Bus"[Universal][0], which is why you're getting the error (what is the "Universal" index of something haha). word[0] on the other hand translates to something like "Universal"[0].

Additional Explanation

The functionality like I think what you're expecting would be:

def initials(phrase):
    words = phrase.split()
    result = ""
    for word in range(len(words)):
        result  = words[word][0]
    return result.upper()

In your example and my initial solution word is a string pulled from the list of words (i.e. 'Universal' from ['Universal', 'Serial', 'Bus']). From how you wrote your code I think you may be expecting word to work more like an index (i.e. words is a list of indices [0, 1, 2] that the for loop iterates through, and word would be the index of each individual word. Both solutions work and are valid but the first is arguably more "pythonic."

CodePudding user response:

Try this, it could help:

def fn_get_initials(ar_string):
    result="".join([i[0] for i in ar_string.split()])
    return str(result).upper()

fn_get_initials("Universal Serial Bus")
  • Related