Problem Formulation
💬 Question: Given a list of lists (=nested list) in Python. How to convert this list of lists to a set in Python?
This is not a trivial problem because Python lists are mutable and, therefore, not hashable. And because of that, they cannot be converted to a set using the direct set()
approach like so:
my_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] my_set = set(my_list)
This raises the TypeError: unhashable type: 'list'
as can be seen in the output when executing the previous code snippet:
Traceback (most recent call last): File "...\code.py", line 2, in <module> my_set = set(my_list) TypeError: unhashable type: 'list'
Let’s have a look at different ways to resolve this problem and convert a nested list to a set in Python.
Method 1: Set Comprehension + tuple()
To convert a list of lists my_list
to a set in Python, you can use the expression {tuple(x) for x in my_list}
that goes over all inner lists in a set comprehension and converts each of them to a tuple. Tuples are immutable, hashable, and therefore can be used in sets, unlike lists.
Here’s the code example:
my_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] my_set = {tuple(x) for x in my_list} print(my_set) # {(7, 8, 9), (1, 2, 3), (4, 5, 6)}
Notice how the order of the elements is lost after converting the list of lists to a set!
Feel free to watch this video to learn more about set comprehension:
🌎 Learn More: You can learn more about set comprehension in this Finxter blog tutorial.
Method 2: Generator Expression + set() + tuple()
A variant of the previous approach is the following:
To convert a nested my_list
to a set in Python, use the expression set(tuple(x) for x in my_list)
that iterates over all inner lists in a generator expression passed into the set()
function and convert each of them to a tuple using tuple()
built-in function.
Again, tuples are immutable, hashable, and therefore can be used in sets, unlike lists.
my_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] my_set = set(tuple(x) for x in my_list) print(my_set) # {(7, 8, 9), (1, 2, 3), (4, 5, 6)}
Super concise one-liner, isn’t it?
You can learn more about generators in this video tutorial — feel free to watch to build your background knowledge in Python!
🌎 Learn More: You can learn more about generator expressions in this Finxter blog tutorial.
Method 3: Loop + Convert + Add Tuples
A simple and straightforward approach to convert a Python list of lists to a set is in four steps:
- Initialize an empty set using
set()
, - Iterate over the inner list in a simple
for
loop, - Convert the inner list to an immutable tuple using
tuple()
, and - Add the newly-created tuple to the set using
set.add()
.
Here’s the code example:
my_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] my_set = set() for x in my_list: my_set.add(tuple(x)) print(my_set) # {(7, 8, 9), (1, 2, 3), (4, 5, 6)}
🌎 Learn More: You can learn more about the set.add()
method in this Finxter blog tutorial.
Method 4: Flatten List of Lists + Set Comprehension
If you need to flatten the nested list before converting it to a flat set, you can use the set comprehension {i for lst in my_list for i in lst}
with nested one-line for
loop expression to iterate over all inner elements of the list of lists.
Here’s the code:
my_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] my_set = {i for lst in my_list for i in lst} print(my_set) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
Here’s a background video on flattening a list of lists:
🌎 Learn More: You can learn more about how to flatten a list of lists in this Finxter blog tutorial.
Method 5: Convert Inner Lists to Strings
An alternative approach to convert a list of lists to a set is to convert the inner lists to strings because strings are immutable and hashable and can therefore be used as set elements:
{str(lst) for lst in my_list}
We use the str()
function in a set comprehension statement to convert the list of lists to a set of strings.
Here’s the code example:
my_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] my_set = {str(lst) for lst in my_list} print(my_set) # {'[7, 8, 9]', '[1, 2, 3]', '[4, 5, 6]'}
🌎 Learn More: If you want to convert the string representation of the list back to a list, you can find out more in this Finxter tutorial.
Summary
The five most Pythonic ways to convert a list of lists to a set in Python are:
- Method 1: Set Comprehension +
tuple()
- Method 2: Generator Expression +
set()
+tuple()
- Method 3: Loop + Convert + Add Tuples
- Method 4: Flatten List of Lists + Set Comprehension
- Method 5: Convert Inner Lists to Strings
Feel free to check out more free tutorials and cheat sheets for learning and improving your Python skills in our free email academy:
Nerd Humor


While working as a researcher in distributed systems, Dr. Christian Mayer found his love for teaching computer science students.
To help students reach higher levels of Python success, he founded the programming education website Finxter.com that has taught exponential skills to millions of coders worldwide. He’s the author of the best-selling programming books Python One-Liners (NoStarch 2020), The Art of Clean Code (NoStarch 2022), and The Book of Dash (NoStarch 2022). Chris also coauthored the Coffee Break Python series of self-published books. He’s a computer science enthusiast, freelancer, and owner of one of the top 10 largest Python blogs worldwide.
His passions are writing, reading, and coding. But his greatest passion is to serve aspiring coders through Finxter and help them to boost their skills. You can join his free email academy here.