Python, print delimited list

78,936

Solution 1

>>> ','.join(map(str,a))
'1,2,3'

Solution 2

A ','.join as suggested in other answers is the typical Python solution; the normal approach, which peculiarly I don't see in any of the answers so far, is

print ','.join(str(x) for x in a)

known as a generator expression or genexp.

If you prefer a loop (or need one for other purposes, if you're doing more than just printing on each item, for example), there are of course also excellent alternatives:

for i, x in enumerate(a):
  if i: print ',' + str(x),
  else: print str(x),

this is a first-time switch (works for any iterable a, whether a list or otherwise) so it places the comma before each item but the first. A last-time switch is slightly less elegant and it work only for iterables which have a len() (not for completely general ones):

for i, x in enumerate(a):
  if i == len(a) - 1: print str(x)
  else: print str(x) + ',',

this example also takes advantage of the last-time switch to terminate the line when it's printing the very last item.

The enumerate built-in function is very often useful, and well worth keeping in mind!

Solution 3

It's very easy:

print(*a, sep=',')

Print lists in Python (4 Different Ways)

Solution 4

There are two options ,

You can directly print the answer using print(*a, sep=',') this will use separator as "," you will get the answer as ,

1,2,3

and another option is ,

print(','.join(str(x) for x in list(a)))

this will iterate the list and print the (a) and print the output as

1,2,3

Solution 5

That's what join is for.

','.join([str(elem) for elem in a])
Share:
78,936

Related videos on Youtube

Mike
Author by

Mike

I hate computers

Updated on April 01, 2022

Comments

  • Mike
    Mike about 2 years

    Consider this Python code for printing a list of comma separated values

    for element in list:
        print element + ",",
    

    What is the preferred method for printing such that a comma does not appear if element is the final element in the list.

    ex

    a = [1, 2, 3]
    for element in a
      print str(element) +",",
    
    output
    1,2,3,
    desired
    1,2,3
    
  • Ponkadoodle
    Ponkadoodle about 14 years
    TypeError: sequence item 0: expected string, int found. It doesn't work for his sample input.
  • Tyler
    Tyler about 14 years
    Right, sorry. It doesn't automatically convert the ints to strings. Fixed with a nifty list comprehension.
  • visual_learner
    visual_learner about 14 years
    Don't use a list comprehension. Take out the []s and it'll make a generator, which will work just as well without creating a (potentially large) unnecessary temporary list.
  • ghostdog74
    ghostdog74 about 14 years
    enumerate is good, but in OP's case, a simple join is enough.
  • Alex Martelli
    Alex Martelli about 14 years
    Sure, that's what I started with (giving the genexp at a time when other answers had maps, listcomps, or no conversion-to-string) -- have you seen the first paragraph of this answer, perchance?-) First-time and last-time switches are more versatile, and no other answer even mentioned them, so I chose to point them out too, of course (including the fact that they're best done via enumerate).
  • Sasha Chedygov
    Sasha Chedygov about 14 years
    join doesn't automatically convert ints to strings, so this won't work.
  • Mike
    Mike about 14 years
    i have to assume you're kidding
  • orokusaki
    orokusaki about 14 years
    Looking at your answer and looking at ghostdog's answer, I'm wondering something. Does a list comprehension use more memory than map will from his example, but is map() slower than a LH? BTW, I recommended your book to somebody who emailed me for help on Python :)
  • Alex Martelli
    Alex Martelli about 14 years
    @orokusaki, memory consumption's the same for map and listcomp (lower for genexp, which is what I use instead); genexp is typically slightly slower (if you have oodles of physical memory available, that is, otherwise the memory consumption of listcomp and map damages their performance), and map sometimes even faster than listcomp (unless it involves using a lambda, which slows it down). None of these performance issues is at all a biggie, unless you must watch your memory footprint for whatever reason, in which case genexp's parsimony in memory can be a biggie;-).
  • orokusaki
    orokusaki about 14 years
    @Ah, I didn't even notice that you left off the brackets. I see now. I like the idea of using a genexp. I'd rather let my users wait the extra .1 milliseconds than decrease the number of concurrent requests I can handle by hogging memory. Not to mention that since I can't control the size of the iterable, somebody could really jam things up with the listcomp version.
  • orokusaki
    orokusaki about 14 years
    @musicfreak Does this seem silly to you that it doesn't str() it automatically? After all, ''.join() is a String method. I wonder why it doesn't do it for free.
  • Ignacio Vazquez-Abrams
    Ignacio Vazquez-Abrams about 14 years
    @orokusaki: It goes against the precept "Explicit is better than implicit".
  • Boyen
    Boyen over 7 years
    How do I use this with a field of an object? so instead of "a" I would have "a.name" for example?
  • A K
    A K over 6 years
    I've replaced sample string 'cause it's too offensive for russian spoken.
  • Shayan
    Shayan over 3 years
    A little explanation would be nice, you answer purely contains code.