Printing a list separated with commas, without a trailing comma

Question:

I am writing a piece of code that should output a list of items separated with a comma. The list is generated with a for loop:

for x in range(5):
    print(x, end=",")

The problem is I don’t know how to get rid of the last comma that is added with the last entry in the list. It outputs this:

0,1,2,3,4,

How do I remove the ending ,?


Most approaches here are based on using a single print call. In order to use separate calls for each x value, the last call would have to be handled differently. That can also be done – see What is the pythonic way to detect the last element in a 'for' loop? – however, this specific problem is better tackled by using print-specific functionality.

Asked By: user2092743

||

Answers:

You can use str.join() and create the string you want to print and then print it. Example –

print(','.join([str(x) for x in range(5)]))

Demo –

>>> print(','.join([str(x) for x in range(5)]))
0,1,2,3,4

I am using list comprehension above, as that is faster than generator expression , when used with str.join .

Answered By: Anand S Kumar

To do that, you can use str.join().

In [1]: print ','.join(map(str,range(5)))
0,1,2,3,4

We will need to convert the numbers in range(5) to string first to call str.join(). We do that using map() operation. Then we join the list of strings obtained from map() with a comma ,.

Answered By: Rahul Gupta

##Pass sep="," as an argument to print()
You are nearly there with the print statement.

There is no need for a loop, print has a sep parameter as well as end.

>>> print(*range(5), sep=", ")
0, 1, 2, 3, 4

###A little explanation

The print builtin takes any number of items as arguments to be printed. Any non-keyword arguments will be printed, separated by sep. The default value for sep is a single space.

>>> print("hello", "world")
hello world

Changing sep has the expected result.

>>> print("hello", "world", sep=" cruel ")
hello cruel world

Each argument is stringified as with str(). Passing an iterable to the print statement will stringify the iterable as one argument.

>>> print(["hello", "world"], sep=" cruel ")
['hello', 'world']

However, if you put the asterisk in front of your iterable this decomposes it into separate arguments and allows for the intended use of sep.

>>> print(*["hello", "world"], sep=" cruel ")
hello cruel world

>>> print(*range(5), sep="---")
0---1---2---3---4

###Using join as an alternative

The alternative approach for joining an iterable into a string with a given separator is to use the join method of a separator string.

>>>print(" cruel ".join(["hello", "world"]))
hello cruel world

This is slightly clumsier because it requires non-string elements to be explicitly converted to strings.

>>>print(",".join([str(i) for i in range(5)]))
0,1,2,3,4

###Brute force – non-pythonic

The approach you suggest is one where a loop is used to concatenate a string adding commas along the way. Of course this produces the correct result but its much harder work.

>>>iterable = range(5)
>>>result = ""
>>>for i, item in enumerate(iterable):
>>>    result = result + str(item)
>>>    if i > len(iterable) - 1:
>>>        result = result + ","
>>>print(result)
0,1,2,3,4
Answered By: Graeme Stuart

Another form you can use, closer to your original code:

opt_comma="" # no comma on first print
for x in range(5):
    print (opt_comma,x,sep="",end="") # we are manually handling sep and end
    opt_comma="," # use comma for prints after the first one
print() # force new line

Of course, the intent of your program is probably better served by the other, more pythonic answers in this thread. Still, in some situations, this could be a useful method.

Another possibility:

for x in range(5):
    if x:
        print (", ",x,end="")
    else:
        print (x, end="")
print()
Answered By: RufusVS
for n in range(5):
    if n == (5-1):
        print(n, end='')
    else:
        print(n, end=',')
Answered By: Tasnuva Leeya

An example code:

for i in range(10):
    if i != 9:
        print(i, end=", ")
    else:
        print(i)

Result:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9
for x in range(5):
    print(x, end=",")
print("b");
Answered By: I-566-Harshit
  1. List item

”’
check if your element is not last ( index = -1 ) and only than add comma:

    for i in lista:
        if i != lista[-1]:
            print((i), end= ", ")
    else:
        print((i), end=" ")
Answered By: Radoslaw Lesniak
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.