String or List?


#1

I want to divide strings or integers to operate with their components and then print out a string. Should I create a list (to be printed as a string) or another string to include all the components before printing? What are the differences of the two methods?


#2

While we can treat a string as a interable, I've seen it suggested that we treat them as immutable objects. Here is proof that a string is iterable:

x = iter("this is a string")
while True:
    try:
        print x.next(),
    except StopIteration:
        print
        print "Bye"
        break

Output in console:

t h i s   i s   a   s t r i n g
Bye

Rexpecting immutability, we could generate a list, then iterate the list to construct a new list, which is then joined at conclusion to form a new string. I'm o expert so cannot go into any further detail.


#3

There are weaknesses in the above that I can already spot. For instance, what need have we of a list if x is already and iterator? If we are only mining data from a string, then iterating the string is wholly appropriate. No changes are being made to the string. In other words, use a string iterator.

x = "this is a string"
y = [ k for k in x ]
print y

The yield is another iterable, a list, and we have not modified the string.

['t', 'h', 'i', 's', ' ', 'i', 's', ' ', 'a', ' ', 's', 't', 'r', 'i', 'n', 'g']

But if our objective was to convert the string to a list there are better ways. What we have here is a means to create a special list, filtered and/or modified to suit. ROT13 comes to mind, or a weird upper case function...

z = [ chr(ord(k)%32+64) for k in x ]
print z

which gives,

['T', 'H', 'I', 'S', '@', 'I', 'S', '@', 'A', '@', 'S', 'T', 'R', 'I', 'N', 'G']

We can make a correction for the @ character by skipping over spaces and not encoding them.

z = [ chr(ord(k)%32+64) if k != ' ' else ' ' for k in x ]
print z

which gives,

['T', 'H', 'I', 'S', ' ', 'I', 'S', ' ', 'A', ' ', 'S', 'T', 'R', 'I', 'N', 'G']

It really comes down to what you need your iterator to do. String, list, dictinoary, they all have a role to play. What are the dictates, and what are the objectives? Each opens their own can of worms.