Skip to content

How to Convert a Set to a String in Python

Learn how to properly convert a Python set to a clean string using str.join(), handle mixed data types, and ensure consistent ordering when needed.

Converting a Python set to a string is a common requirement, but the default str() conversion often produces an undesirable format that includes curly braces and quotation marks. To create a clean, concatenated string from a set's elements, the str.join() method is the ideal tool.

This guide will show you the limitations of the default str() conversion and then walk you through the correct, Pythonic way to join set elements into a string, including how to handle sets containing non-string data types.

The Default str() Conversion and Its Limitations

If you use the built-in str() function to convert a set, it will produce the set's official string representation, which is not typically useful for display or further processing.

Example of the default behavior:

my_set = {"A", "S", "D"}

default_string = str(my_set)

print(default_string)
print(f"Type of result: {type(default_string)}")

Output:

{'A', 'D', 'S'}
Type of result: <class 'str'>

As you can see, the resulting string includes the {} characters, quotes around string elements, and commas. Most use cases require a simple, clean string like "ASD" or "A, S, D".

The str.join() method is the most Pythonic and efficient way to concatenate elements from an iterable into a single string. You call this method on a separator string and pass the set as an argument.

Solution:

my_set = {"A", "S", "D"}

joined_string = "".join(my_set)
print(f"Joined with no separator: '{joined_string}'")

separated_string = ", ".join(my_set)
print(f"Joined with a separator: '{separated_string}'")

Output (note: order may vary):

Joined with no separator: 'DAS'
Joined with a separator: 'D, A, S'

Handling Sets with Mixed Data Types

The str.join() method works only if all elements in the iterable are strings. If your set contains other data types like integers, floats, or booleans, it will raise a TypeError.

Example of code causing the error:

mixed_set = {"A", 1, True, "B"}

try:
    result = ", ".join(mixed_set)
except TypeError as e:
    print(f"Error: {e}")

Output:

Error: sequence item 1: expected str instance, int found

To fix this, you must first convert every element in the set to its string representation.

Method 2: Using a Generator Expression with str.join()

The cleanest way to handle a mixed-type set is to use a generator expression to convert each item to a string on-the-fly within the join() call. This is highly efficient as it avoids creating an intermediate list in memory.

Solution:

mixed_set = {"A", 10, True, 2.5, "B"}

result = ", ".join(str(item) for item in mixed_set)

print(result)

Output (order may vary):

10, 2.5, B, A, True

A Note on Set Ordering

Conclusion

To convert a Python set to a string, the str.join() method is the best tool.

If your set contains... The best solution is... Example
Only strings str.join() directly ", ".join(my_set)
Mixed data types str.join() with a generator expression or map() to convert elements to strings first ", ".join(str(i) for i in my_set)
Ordered output is required Convert to a sorted list first, then join ", ".join(sorted(list(my_set)))

Avoid using the default str(my_set) conversion unless you specifically need the official string representation of the set object.

Navigation