user2092743
user2092743

Reputation: 381

Printing a list separated with commas, without a trailing comma

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.

Upvotes: 22

Views: 112880

Answers (8)

Graeme Stuart
Graeme Stuart

Reputation: 6053

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

Upvotes: 50

Radoslaw Lesniak
Radoslaw Lesniak

Reputation: 1

  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=" ")

Upvotes: 0

RufusVS
RufusVS

Reputation: 4127

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()

Upvotes: 2

I-566-Harshit
I-566-Harshit

Reputation: 1

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

Upvotes: 0

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

Upvotes: 0

Tasnuva Leeya
Tasnuva Leeya

Reputation: 2795

for n in range(5):
    if n == (5-1):
        print(n, end='')
    else:
        print(n, end=',')

Upvotes: 0

Anand S Kumar
Anand S Kumar

Reputation: 90889

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 .

Upvotes: 7

Rahul Gupta
Rahul Gupta

Reputation: 47846

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 ,.

Upvotes: 3

Related Questions