user3330472
user3330472

Reputation: 89

How to include spaces as characters in lists

This is my current code:

key = input("Enter the key: ")
sent = input("Enter a sentence: ")
print()# for turnin
print()

print("With a key of:",key)
print("Original sentence:",sent)
print()

#split = sent.split()
blank = [ ]
for word in sent:
    for ch in word:
        blank = blank + ch.split()
print(blank)
print()

What i have now gives me a list of all the letters in my sentence, but no spaces. If i use this...

for word in sent:
    for ch in word:
        print(ch.split())

It gives me a list of all characters including the spaces. Is there to get this result and have it equal a variable?

Upvotes: 0

Views: 1419

Answers (5)

Totem
Totem

Reputation: 7369

string = "This here is a string"

>>> x = list(string) # I think list() is what you are looking for... It's not clear
>>> print x
['T', 'h', 'i', 's', ' ', 'h', 'e', 'r', 'e', ' ', 'i', 's', ' ', 'a', ' ', 's', 't', 'r', 'i', 'n', 'g']

>>> print string.split() # default arg is a space
['This', 'here', 'is', 'a', 'string']

Upvotes: 0

rodrigo
rodrigo

Reputation: 98436

sent is of type string. and when you iterate over a string this way:

for word in sent:

you get the individual characters, not the words.

Then you iterate over a single char:

    for ch in word:

and get that very same char (!).

And then with that split() call you convert a non-blank character, say 'x' into a list with itself as element (['x']) and a blank characters into the empty list.

You probably want something along the lines of:

for word in sent.split():
    ....

But if what you want is to build a list of words, no need to iterate, that's exactly what sent.split() will get you!

And if what you want is a list of chars, do list(sent).

From help(str.split):

split(...)

S.split(sep=None, maxsplit=-1) -> list of strings

Return a list of the words in S, using sep as the delimiter string. If maxsplit is given, at most maxsplit splits are done. If sep is not specified or is None, any whitespace string is a separator and empty strings are removed from the result.

Upvotes: 3

user2357112
user2357112

Reputation: 281476

If you just want a list of all characters in the sentence, use

chars = list(sent)

What you're doing is definitely not what you think you're doing.

for word in sent:

This doesn't loop over the words. This loops over the characters. This:

for word in sent.split()

would loop over the words.

    for ch in word:

Since word is a character already, this loops over a single character. If it weren't for the fact that characters are represented as length-1 strings, this would throw some kind of error.

Upvotes: 3

g.d.d.c
g.d.d.c

Reputation: 48028

If you want individual characters of a string, pass it to list.

>>> list('This is a string.')
['T', 'h', 'i', 's', ' ', 'i', 's', ' ', 'a', ' ', 's', 't', 'r', 'i', 'n', 'g', '.']

Upvotes: 2

Adam Smith
Adam Smith

Reputation: 54223

I'm not 100% sure what you're asking, but it seems like....

blank = [ch for ch in sent]

...that's all you need....

Let me give you some sample Ins and Outs and see if that's what you want.

IN = "Hello world!"
OUT =>
['H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!']

Is that right?

Upvotes: 1

Related Questions