简体   繁体   中英

Python - printing out list separated with 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. I use the

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 ' , ' ?

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 item, i in enumerate(iterable):
>>>    result = result + str(item)
>>>    if i > len(iterable) - 1:
>>>        result = result + ","
>>>print(result)
0,1,2,3,4

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 .

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

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.

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

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

Hope it solves your problem.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM