On Fri, 21 Jan 2011 07:39:26 -0800, Oltmans wrote: > Hi Python gurus, hope you're doing well. I've a small problem. > > When I run the following code > ___________________________________________________ >>>> names = ['oltmans','abramhovic','\n','sal','lee'] print '| ' + ' | >>>> '.join(names) > | oltmans | abramhovic | > | sal | lee > ___________________________________________________ > > I get the output like above. However, I want it to output like below > > | oltmans | abramhovic | > | sal | lee > > > That is, there shouldn't be a space in the beginning of second line. The > list can of course contain more than 5 elements. Any ideas? I will > appreciate any hint. Thanks in advance.
It looks like your trying to print a formatted list. With your code you are: 1) creating a string from a list, with added characters. 2) printing the new string. So, look at your string: names = ['oltmans','abramhovic','\n','sal','lee'] newNames = '| ' + ' | '.join( names ) >> newNames '| oltmans | abramhovic | \n | sal | lee' Now you can see your space after the newline (and a missing pipe symbol at the end). When you ask the compiler for newNames, you can see there is a space after the newline character. Naturally, the print operator prints out the space. If this is indeed a formatted list, you should try something else. Something like: # first get rid of you formatting element in the list '\n'. names = [ 'oltmans','abramhovic','sal','lee' ] # next iterate by twos via the function 'range( start, stop, step )' range( 0, len( names ), 2 ) [ 0, 2 ] # now fix up the printing by twos. >>> for x in range( 0, len( names ), 2 ): ... print '| %s | %s |' % ( names[ x ], names[ x + 1 ] ) ... | oltmans | abramhovic | | sal | lee | Next, make it pretty. The next step would be to find the longest string in your list. >>> def max( theList ): ... theMax = 0 ... for element in theList: ... if len( element ) > theMax: ... theMax = len( element ) ... return theMax >>> max( names ) 10 Now some centering of strings, from you list. >>> for x in range( 0, len( names ), 2 ): ... print '| %s | %s |' % \ ( names[ x ].center(10), \ names[ x +1 ].center(10) ) ... | oltmans | abramhovic | | sal | lee | Pretty list. Now make it obscure, like you are a perl programmer; don't forget to eat up memory as you go along .... def maxElement( aList ): lenList = [] for x in aList: lenList.append( len( x ) ) return sorted( lenList, reverse=True )[0] def formatLine( firstName, secondName, width ): return '| %s | %s | % \ ( firstName.center( width ), \ secondName.center( width ) ) theWidth = maxElement( names ) for x in range( 0, len( names ), 2 ): aLine = formatLines( names[x], names[x+1], theWidth ) print aLine Make sure to create at lest two additions files to store maxElement and formatLine, create an __init__.py and make a package, turn in the project and get expelled for being grandiose. steven. -- http://mail.python.org/mailman/listinfo/python-list