How to remove duplicate items from a list in Python
To remove duplicates in the list, if the order is not required, you can use list(set(original_list)), which is the fastest but does not guarantee the order; if the order is required, it is recommended to list(dict.fromkeys(original_list)), which is efficient and maintains the insertion order in Python 3.7; for dictionaries and other non-hashable types or custom deduplication logic, a loop should be used to manually control it with the seeen list or collection; if complex structures are processed, it can be converted and processed through json.dumps() or tuple(). In summary, dict.fromkeys() is generally the best choice to take into account performance, readability and order preservation.
Removing duplicate items from a list in Python is a common task, and there are several ways to do it depending on your needs—like whether you need to preserve the original order or not. Here are the most practical methods:
1. Using set()
(Fastest, but doesn't preserve order)
If the order of elements doesn't matter, converting the list to a set is the quickest way to remove duplicates, since sets only store unique values.
original_list = [3, 1, 2, 2, 1, 3, 4] unique_list = list(set(original_list)) print(unique_list) # Output might be: [1, 2, 3, 4]
⚠️ Note: The order of items is not guaranteed because sets are unordered collections.
This method is efficient for large lists when order isn't important.
2. Using dict.fromkeys()
(Preserves order and is efficient)
Starting from Python 3.7, dictionaries preserve insertion order. You can use dict.fromkeys()
to remove duplicates while keeping the original order.
original_list = [3, 1, 2, 2, 1, 3, 4] unique_list = list(dict.fromkeys(original_list)) print(unique_list) # Output: [3, 1, 2, 4]
This is generally the best approach when you want to keep the first occurrence of each item and maintain order.
- It's fast (similar performance to using a set)
- Preserves order
- Handles unhashable types? No — only works with hashable items (like numbers, strings, tuples)
3. Using a loop for complex cases (Maximum control)
If you're dealing with unhashable types like dictionaries or lists, or need custom logic to determine duplicates, use a loop.
original_list = [{'id': 1}, {'id': 2}, {'id': 1}] unique_list = [] seen = [] for item in original_list: if item['id'] not in seen: see.append(item['id']) unique_list.append(item) print(unique_list) # Output: [{'id': 1}, {'id': 2}]
This method is slower for large data but gives you full control. You can define what makes items "duplicate" (eg, based on a key).
Alternatively, for unhashable types, you might use a more advanced approach with json.dumps()
or tuple()
conversion if structure allows.
4. Using list comprehension with a helper set (Order preserved, good performance)
You can manually track see items using a set during iteration:
original_list = [3, 1, 2, 2, 1, 3, 4] see = set() unique_list = [] for item in original_list: if item not in see: seen.add(item) unique_list.append(item) print(unique_list) # Output: [3, 1, 2, 4]
This is slightly more verbose than dict.fromkeys()
, but useful when you need to apply extra logic during filtering.
Summary: Which method to choose?
- ✅ Preserve order & simple data? →
list(dict.fromkeys(my_list))
- ✅ Don't care about order? →
list(set(my_list))
- ✅ Dealing with dictionaries or custom logic? → Use a loop with a tracking variable
- ⚠️ List contains lists or unhashable items? → You'll need to convert or compare manually
Most of the time, dict.fromkeys()
is the sweet spot for readingability, speed, and order preservation.
Basically, pick the method that fits your data and requirements.
The above is the detailed content of How to remove duplicate items from a list in Python. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Table of Contents What is sentiment analysis in cryptocurrency trading? Why sentiment analysis is important in cryptocurrency investment Key sources of emotion data a. Social media platform b. News media c. Tools for sentiment analysis and technology Commonly used tools in sentiment analysis: Techniques adopted: Integrate sentiment analysis into trading strategies How traders use it: Strategy example: Assuming BTC trading scenario scenario setting: Emotional signal: Trader interpretation: Decision: Results: Limitations and risks of sentiment analysis Using emotions for smarter cryptocurrency trading Understanding market sentiment is becoming increasingly important in cryptocurrency trading. A recent 2025 study by Hamid

When processing large data sets that exceed memory in Python, they cannot be loaded into RAM at one time. Instead, strategies such as chunking processing, disk storage or streaming should be adopted; CSV files can be read in chunks through Pandas' chunksize parameters and processed block by block. Dask can be used to realize parallelization and task scheduling similar to Pandas syntax to support large memory data operations. Write generator functions to read text files line by line to reduce memory usage. Use Parquet columnar storage format combined with PyArrow to efficiently read specific columns or row groups. Use NumPy's memmap to memory map large numerical arrays to access data fragments on demand, or store data in lightweight data such as SQLite or DuckDB.

UseSublimeText’sbuildsystemtorunPythonscriptsandcatcherrorsbypressingCtrl Baftersettingthecorrectbuildsystemorcreatingacustomone.2.Insertstrategicprint()statementstocheckvariablevalues,types,andexecutionflow,usinglabelsandrepr()forclarity.3.Installth

Useprint()statementstocheckvariablevaluesandexecutionflow,addinglabelsandtypesforclarity,andremovethembeforecommitting;2.UsethePythondebugger(pdb)withbreakpoint()topauseexecution,inspectvariables,andstepthroughcodeinteractively;3.Handleexceptionsusin

Make sure that Python is installed and added to the system PATH, run python--version or python3--version verification through the terminal; 2. Save the Python file as a .py extension, such as hello.py; 3. Create a custom build system in SublimeText, Windows users use {"cmd":["python","-u","$file"]}, macOS/Linux users use {"cmd":["python3

To debug Python scripts, you need to first install the Python extension and configure the interpreter, then create a launch.json file to set the debugging configuration, then set a breakpoint in the code and press F5 to start the debugging. The script will be paused at the breakpoint, allowing checking variables and step-by-step execution. Finally, by checking the problem by viewing the console output, adding logs or adjusting parameters, etc., to ensure that the debugging process is simple and efficient after the environment is correct.

ToautomaticallyformatPythoncodeinVSCode,installBlackusingpipinstallblack,installtheofficialMicrosoftPythonextension,setBlackastheformatterinsettings.jsonwith"python.formatting.provider":"black",enableformatonsavebyadding"edit

The yield keyword is used to define a generator function, so that it can pause execution and return values one by one, and then recover from the pause; the generator function returns a generator object, has lazy evaluation characteristics, and can save memory. It is suitable for handling scenarios such as large files, streaming data, and infinite sequences. The generator is an iterator that supports next() and for loops, but cannot be rewind and must be recreated to iterate again.
