How do I concatenate a list of strings into a single string?
['this', 'is', 'a', 'sentence'] → 'this-is-a-sentence'
Use str.join
:
>>> sentence = ['this', 'is', 'a', 'sentence']
>>> '-'.join(sentence)
'this-is-a-sentence'
>>> ' '.join(sentence)
'this is a sentence'
A more generic way to convert python lists to strings would be:
>>> xs = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> ''.join(map(str, xs))
'12345678910'
map(str, my_lst)
would be enough without enumerating the list =)
int
but it could be any type that can be represented as a string.
' '.join(map(lambda x: ' $'+ str(x), my_lst))
would return '$1 $2 $3 $4 $5 $6 $7 $8 $9 $10'
It's very useful for beginners to know why join is a string method.
It's very strange at the beginning, but very useful after this.
The result of join is always a string, but the object to be joined can be of many types (generators, list, tuples, etc).
.join
is faster because it allocates memory only once. Better than classical concatenation (see, extended explanation).
Once you learn it, it's very comfortable and you can do tricks like this to add parentheses.
>>> ",".join("12345").join(("(",")"))
Out:
'(1,2,3,4,5)'
>>> list = ["(",")"]
>>> ",".join("12345").join(list)
Out:
'(1,2,3,4,5)'
join()
i.e. join(("(",")"))
does? its like magic
("(",")")
is a tuple of two strings - the open parenthesis "("
and the close parenthesis ")"
. So the second join()
joins those two strings using the output of the first join()
as the separator (i.e., '1,2,3,4,5'
).
Edit from the future: Please don't use the answer below. This function was removed in Python 3 and Python 2 is dead. Even if you are still using Python 2 you should write Python 3 ready code to make the inevitable upgrade easier.
Although @Burhan Khalid's answer is good, I think it's more understandable like this:
from str import join
sentence = ['this','is','a','sentence']
join(sentence, "-")
The second argument to join() is optional and defaults to " ".
list_abc = ['aaa', 'bbb', 'ccc']
string = ''.join(list_abc)
print(string)
>>> aaabbbccc
string = ','.join(list_abc)
print(string)
>>> aaa,bbb,ccc
string = '-'.join(list_abc)
print(string)
>>> aaa-bbb-ccc
string = '\n'.join(list_abc)
print(string)
>>> aaa
>>> bbb
>>> ccc
We can also use Python's reduce function:
from functools import reduce
sentence = ['this','is','a','sentence']
out_str = str(reduce(lambda x,y: x+"-"+y, sentence))
print(out_str)
join
?
We can specify how we have to join the string. Instead of '-', we can use ' '
sentence = ['this','is','a','sentence']
s=(" ".join(sentence))
print(s)
If you have mixed content list. And want to stringify it. Here is one way:
Consider this list:
>>> aa
[None, 10, 'hello']
Convert it to string:
>>> st = ', '.join(map(str, map(lambda x: f'"{x}"' if isinstance(x, str) else x, aa)))
>>> st = '[' + st + ']'
>>> st
'[None, 10, "hello"]'
If required, convert back to list:
>>> ast.literal_eval(st)
[None, 10, 'hello']
str(aa)
also gives "[None, 10, 'hello']"
...
If you want to generate a string of strings separated by commas in final result, you can use something like this:
sentence = ['this','is','a','sentence']
sentences_strings = "'" + "','".join(sentence) + "'"
print (sentences_strings) # you will get "'this','is','a','sentence'"
def eggs(someParameter):
del spam[3]
someParameter.insert(3, ' and cats.')
spam = ['apples', 'bananas', 'tofu', 'cats']
eggs(spam)
spam =(','.join(spam))
print(spam)
Without .join() method you can use this method:
my_list=["this","is","a","sentence"]
concenated_string=""
for string in range(len(my_list)):
if string == len(my_list)-1:
concenated_string+=my_list[string]
else:
concenated_string+=f'{my_list[string]}-'
print([concenated_string])
>>> ['this-is-a-sentence']
So, range based for loop in this example , when the python reach the last word of your list, it should'nt add "-" to your concenated_string. If its not last word of your string always append "-" string to your concenated_string variable.
Success story sharing
sentence.join(" ")
to work as well, since the reverse operation islist.split(" ")
. Any idea if this is going to be added to Python's methods for lists?list.join
would be inappropriate for an arbitrary list. On the other, the argument ofstr.join
can be any "iterable" sequence of strings, not just a list. The only thing that would make sense is a built-in functionjoin(list, sep)
; there's one in the (basically obsolete)string
module if you really want it.' '.join(['this', 'is', 'a', 'sentence'])