Python String join() Method

The Python string join() method combines multiple strings into one string.

It is useful when you have a list or tuple of text values and want to join them with a separator such as a space, comma, dash, or nothing at all.

A key rule to remember is this:

  • You call join() on the separator string
  • Every item you join must already be a string

Quick answer #

words = ["Python", "is", "fun"]
result = " ".join(words)
print(result)

Output:

Python is fun

Use join() on the separator string. Every item in the iterable must be a string.

What join() does #

join() combines multiple strings into one string.

Important points:

  • It uses the string before .join() as the separator
  • Common separators are:
    • " " for spaces
    • ", " for commas
    • "-" for dashes
    • "" for no separator
  • It returns a new string
  • It does not change the original list or tuple

Example:

words = ["red", "green", "blue"]
result = ", ".join(words)

print(result)
print(words)

Output:

red, green, blue
['red', 'green', 'blue']

The list stays the same. join() creates a new string.

Basic syntax #

The basic syntax is:

separator.join(iterable)

Parts of the syntax #

  • separator is a string such as " ", ", ", "-", or ""
  • iterable is usually a list or tuple of strings
  • All items in the iterable must be strings

Example:

names = ["Ana", "Ben", "Cara"]
result = " | ".join(names)

print(result)

Output:

Ana | Ben | Cara

If you are still getting comfortable with strings, see Python strings explained: basics and examples.

Simple examples #

Join words with a space #

words = ["Python", "is", "easy"]
result = " ".join(words)

print(result)

Output:

Python is easy

Join values with a comma #

items = ["apples", "bananas", "oranges"]
result = ", ".join(items)

print(result)

Output:

apples, bananas, oranges

Join characters with an empty string #

letters = ["P", "y", "t", "h", "o", "n"]
result = "".join(letters)

print(result)

Output:

Python

Show that join() returns the result #

words = ["one", "two", "three"]
joined_text = "-".join(words)

print(joined_text)

Output:

one-two-three

Using different separators #

The separator controls what appears between each item.

" ".join(...) adds spaces #

words = ["hello", "world"]
print(" ".join(words))

Output:

hello world

", ".join(...) creates comma-separated text #

colors = ["red", "blue", "green"]
print(", ".join(colors))

Output:

red, blue, green

This is useful when building simple CSV-style text.

"-".join(...) is useful for slugs or IDs #

parts = ["python", "string", "join"]
print("-".join(parts))

Output:

python-string-join

"".join(...) joins with no separator #

chars = ["A", "B", "C"]
print("".join(chars))

Output:

ABC

What types of values work #

join() works when every item is already a string.

This works #

values = ["10", "20", "30"]
print(", ".join(values))

Output:

10, 20, 30

Numbers do not work directly #

values = [1, 2, 3]
print(", ".join(values))

This causes a TypeError because the list contains integers, not strings.

To fix it, convert the values first:

values = [1, 2, 3]
result = ", ".join(map(str, values))

print(result)

Output:

1, 2, 3

If you need a clearer explanation of string conversion, see Python str() function explained.

None values do not work directly #

values = ["apple", None, "banana"]
print(", ".join(values))

This also causes a TypeError.

One fix is to convert values to strings:

values = ["apple", None, "banana"]
result = ", ".join(map(str, values))

print(result)

Output:

apple, None, banana

Be careful with this approach. Sometimes you may want to remove None values instead of converting them.

join() also works with tuples #

names = ("Sam", "Lee", "Mia")
print(" / ".join(names))

Output:

Sam / Lee / Mia

Common errors with join() #

Here are the most common beginner mistakes.

1. TypeError because not all items are strings #

items = ["a", 2, "c"]
print(" ".join(items))

This fails because 2 is an integer.

Fix:

items = ["a", 2, "c"]
print(" ".join(map(str, items)))

If you see an error like this, read how to fix TypeError: sequence item 0: expected str instance.

2. Calling join() on a list instead of a string #

This is wrong:

words = ["Python", "is", "fun"]
result = words.join(" ")

join() is a string method, not a list method.

Correct version:

words = ["Python", "is", "fun"]
result = " ".join(words)

print(result)

3. Using the wrong separator #

words = ["one", "two", "three"]
print("".join(words))

Output:

onetwothree

If you wanted spaces, use " " instead.

4. Forgetting that join() returns a new string #

words = ["a", "b", "c"]
"-".join(words)

print(words)

Output:

['a', 'b', 'c']

The list is unchanged because join() returns a new string. You need to store or print the result.

join() vs concatenation with + #

Both join() and + can combine strings, but they are used in different situations.

Use + for a small number of fixed strings #

first = "Hello"
second = "World"
result = first + " " + second

print(result)

Output:

Hello World

Use join() for many strings or a list of strings #

words = ["Python", "makes", "this", "easy"]
result = " ".join(words)

print(result)

Output:

Python makes this easy

join() is usually cleaner when:

  • You already have a list of strings
  • You want the same separator between every item
  • You want to avoid writing many + operators

For a task-focused guide, see how to join strings in Python.

Common mistakes to check #

If join() is not working, check these first:

  • You may be trying to join a list that contains integers
  • You may be trying to join a list that contains None
  • You may have written list.join(...) instead of string.join(...)
  • You may be expecting join() to change the original iterable
  • You may have passed a non-iterable value

These quick checks can help:

print(type(items))
print(items)
print([type(item) for item in items])
print(' '.join(['a', 'b', 'c']))
print(', '.join(map(str, [1, 2, 3])))

What these checks do:

  • print(type(items)) shows what kind of value items is
  • print(items) shows the actual contents
  • print([type(item) for item in items]) shows the type of each item
  • print(' '.join(['a', 'b', 'c'])) confirms normal join() behavior
  • print(', '.join(map(str, [1, 2, 3]))) shows how to join numbers after converting them

FAQ #

Does join() work with numbers? #

Not directly. join() needs strings. Convert numbers first, for example with map(str, values).

Does join() change the original list? #

No. It returns a new string and leaves the original list unchanged.

Can I use join() with a tuple? #

Yes. join() works with any iterable of strings, including tuples.

What does ''.join(words) do? #

It joins the strings without adding any separator between them.

Why do I get TypeError when using join()? #

Usually because at least one item in the iterable is not a string.

See also #

Once you understand join(), you can use it in real tasks like formatting full names, building comma-separated text, and combining words from a list into a single string.

Press Esc to close