Join all elements in list python with comma

What would be your preferred way to concatenate strings from a sequence such that between every two consecutive pairs a comma is added. That is, how do you map, for instance, ['a', 'b', 'c'] to 'a,b,c'? [The cases ['s'] and [] should be mapped to 's' and '', respectively.]

I usually end up using something like ''.join[map[lambda x: x+',',l]][:-1], but also feeling somewhat unsatisfied.

Georgy

10.7k7 gold badges62 silver badges68 bronze badges

asked Sep 4, 2008 at 21:04

1

my_list = ['a', 'b', 'c', 'd']
my_string = ','.join[my_list]
'a,b,c,d'

This won't work if the list contains integers

And if the list contains non-string types [such as integers, floats, bools, None] then do:

my_string = ','.join[map[str, my_list]] 

answered Sep 4, 2008 at 21:06

Mark BiekMark Biek

143k54 gold badges155 silver badges200 bronze badges

4

Why the map/lambda magic? Doesn't this work?

>>> foo = ['a', 'b', 'c']
>>> print[','.join[foo]]
a,b,c
>>> print[','.join[[]]]

>>> print[','.join[['a']]]
a

In case if there are numbers in the list, you could use list comprehension:

>>> ','.join[[str[x] for x in foo]]

or a generator expression:

>>> ','.join[str[x] for x in foo]

Georgy

10.7k7 gold badges62 silver badges68 bronze badges

answered Sep 4, 2008 at 21:08

jmanning2kjmanning2k

9,0694 gold badges30 silver badges23 bronze badges

0

",".join[l] will not work for all cases. I'd suggest using the csv module with StringIO

import StringIO
import csv

l = ['list','of','["""crazy"quotes"and\'',123,'other things']

line = StringIO.StringIO[]
writer = csv.writer[line]
writer.writerow[l]
csvcontent = line.getvalue[]
# 'list,of,"[""""""crazy""quotes""and\'",123,other things\r\n'

answered Feb 10, 2016 at 15:43

Ricky SahuRicky Sahu

22.1k4 gold badges39 silver badges31 bronze badges

2

@Peter Hoffmann

Using generator expressions has the benefit of also producing an iterator but saves importing itertools. Furthermore, list comprehensions are generally preferred to map, thus, I'd expect generator expressions to be preferred to imap.

>>> l = [1, "foo", 4 ,"bar"]
>>> ",".join[str[bit] for bit in l]
'1,foo,4,bar' 

answered Sep 5, 2008 at 16:29

Aaron MaenpaaAaron Maenpaa

115k10 gold badges94 silver badges108 bronze badges

1

Here is a alternative solution in Python 3.0 which allows non-string list items:

>>> alist = ['a', 1, [2, 'b']]
  • a standard way

    >>> ", ".join[map[str, alist]]
    "a, 1, [2, 'b']"
    
  • the alternative solution

    >>> import io
    >>> s = io.StringIO[]
    >>> print[*alist, file=s, sep=', ', end='']
    >>> s.getvalue[]
    "a, 1, [2, 'b']"
    

NOTE: The space after comma is intentional.

answered Oct 1, 2008 at 9:23

jfsjfs

381k179 gold badges943 silver badges1611 bronze badges

Don't you just want:

",".join[l]

Obviously it gets more complicated if you need to quote/escape commas etc in the values. In that case I would suggest looking at the csv module in the standard library:

//docs.python.org/library/csv.html

twasbrillig

15.3k9 gold badges40 silver badges62 bronze badges

answered Sep 4, 2008 at 21:09

Douglas LeederDouglas Leeder

51k9 gold badges91 silver badges136 bronze badges

>>> my_list = ['A', '', '', 'D', 'E',]
>>> ",".join[[str[i] for i in my_list if i]]
'A,D,E'

my_list may contain any type of variables. This avoid the result 'A,,,D,E'.

answered May 20, 2017 at 11:31

ShameemShameem

2,44416 silver badges20 bronze badges

l=['a', 1, 'b', 2]

print str[l][1:-1]

Output: "'a', 1, 'b', 2"

AlvaroAV

9,84710 gold badges56 silver badges88 bronze badges

answered Sep 15, 2008 at 18:08

1

@jmanning2k using a list comprehension has the downside of creating a new temporary list. The better solution would be using itertools.imap which returns an iterator

from itertools import imap
l = [1, "foo", 4 ,"bar"]
",".join[imap[str, l]]

answered Sep 4, 2008 at 21:57

Peter HoffmannPeter Hoffmann

53.8k15 gold badges74 silver badges58 bronze badges

2

Here is an example with list

>>> myList = [['Apple'],['Orange']]
>>> myList = ','.join[map[str, [i[0] for i in myList]]] 
>>> print "Output:", myList
Output: Apple,Orange

More Accurate:-

>>> myList = [['Apple'],['Orange']]
>>> myList = ','.join[map[str, [type[i] == list and i[0] for i in myList]]] 
>>> print "Output:", myList
Output: Apple,Orange

Example 2:-

myList = ['Apple','Orange']
myList = ','.join[map[str, myList]] 
print "Output:", myList
Output: Apple,Orange

answered May 15, 2017 at 11:25

2

If you want to do the shortcut way :] :

','.join[[str[word] for word in wordList]]

But if you want to show off with logic :] :

wordList = ['USD', 'EUR', 'JPY', 'NZD', 'CHF', 'CAD']
stringText = ''

for word in wordList:
    stringText += word + ','

stringText = stringText[:-2]   # get rid of last comma
print[stringText]

answered Jun 26, 2020 at 16:53

faiz-efaiz-e

1823 silver badges21 bronze badges

Unless I'm missing something, ','.join[foo] should do what you're asking for.

>>> ','.join[['']]
''
>>> ','.join[['s']]
's'
>>> ','.join[['a','b','c']]
'a,b,c'

[edit: and as jmanning2k points out,

','.join[[str[x] for x in foo]]

is safer and quite Pythonic, though the resulting string will be difficult to parse if the elements can contain commas -- at that point, you need the full power of the csv module, as Douglas points out in his answer.]

answered Sep 4, 2008 at 21:10

David SingerDavid Singer

1,1621 gold badge10 silver badges11 bronze badges

I would say the csv library is the only sensible option here, as it was built to cope with all csv use cases such as commas in a string, etc.

To output a list l to a .csv file:

import csv
with open['some.csv', 'w', newline=''] as f:
    writer = csv.writer[f]
    writer.writerow[l]  # this will output l as a single row.  

It is also possible to use writer.writerows[iterable] to output multiple rows to csv.

This example is compatible with Python 3, as the other answer here used StringIO which is Python 2.

answered Jun 18, 2018 at 15:08

Ron KalianRon Kalian

2,9442 gold badges14 silver badges22 bronze badges

1

mmm also need for SQL is :

l = ["foo" , "baar" , 6]
where_clause = "..... IN ["+[','.join[[ f"'{x}'" for x in l]]]+"]"
>> "..... IN ['foo','baar','6']"

enjoit

answered Nov 26, 2021 at 14:44

My two cents. I like simpler an one-line code in python:

>>> from itertools import imap, ifilter
>>> l = ['a', '', 'b', 1, None]
>>> ','.join[imap[str, ifilter[lambda x: x, l]]]
a,b,1
>>> m = ['a', '', None]
>>> ','.join[imap[str, ifilter[lambda x: x, m]]]
'a'

It's pythonic, works for strings, numbers, None and empty string. It's short and satisfies the requirements. If the list is not going to contain numbers, we can use this simpler variation:

>>> ','.join[ifilter[lambda x: x, l]]

Also this solution doesn't create a new list, but uses an iterator, like @Peter Hoffmann pointed [thanks].

answered Jan 7, 2018 at 13:56

RobertoRoberto

3746 silver badges9 bronze badges

1

How do you join a string with a comma in Python?

Python concatenate strings with a separator We can also concatenate the strings by using the ',' separator in between the two strings, and the “+ ” operator is used to concatenate the string with a comma as a separator. To get the output, I have used print[str].

How do you join a string with a comma delimited?

To join or concatenate strings with a separator or delimiter in Go, use strings. Join[] method. strings. Join[] function accepts two parameters, slice of strings and delimiter and returns a combined string joined by a delimiter.

How do you join all elements in a list in Python?

“join all elements in list python” Code Answer's.
list = ['Add', 'Grepper', 'Answer'].
Inline..
> joined = " ". join[list].
> Add Grepper Answer..
Variable..
> seperator = ", ".
> joined = seperator. join[list].
> Add, Grepper, Answer..

How do you accept a comma

Use the join[] Function to Convert a List to a Comma-Separated String in Python. The join[] function combines the elements of an iterable and returns a string. We need to specify the character that will be used as the separator for the elements in the string.

Chủ Đề