লিস্ট পাইথনের সবচেয়ে গুরুত্বপূর্ণ কন্টেইনার। ডুপ্লিকেট রিমুভ (remove duplicates) করা একটি সাধারণ অপারেশন। এখানে ৫টি ভিন্ন পদ্ধতি দেওয়া হলো।
পদ্ধতি ১: নেইভ (Naive) মেথড - লুপ + চেক
test_list = [1, 3, 5, 6, 3, 5, 6, 1]
res = []
for i in test_list:
if i not in res:
res.append(i)
# ফলাফল: [1, 3, 5, 6]
সময় জটিলতা: O(n²) - বড় লিস্টের জন্য ধীর।
পদ্ধতি ২: লিস্ট কমপ্রিহেনশন
test_list = [1, 3, 5, 6, 3, 5, 6, 1]
res = []
[res.append(x) for x in test_list if x not in res]
# ফলাফল: [1, 3, 5, 6]
নেইভ মেথডের কনসাইস (concise) ভার্সন, পারফরম্যান্স একই।
পদ্ধতি ৩: set() ব্যবহার - সবচেয়ে দ্রুত কিন্তু অর্ডার মেইনটেইন করে না
test_list = [1, 5, 3, 6, 3, 5, 6, 1]
test_list = list(set(test_list))
# ফলাফল: [1, 3, 5, 6] (অর্ডার পরিবর্তিত হতে পারে)
সময় জটিলতা: O(n) - সবচেয়ে দ্রুত। কিন্তু অর্ডার গ্যারান্টি নেই (পাইথন ৩.৭+ এ ইনসারশন অর্ডার মেইনটেইন করে)।
পদ্ধতি ৪: লিস্ট কমপ্রিহেনশন + enumerate() - অর্ডার সংরক্ষণ
test_list = [1, 5, 3, 6, 3, 5, 6, 1]
res = [i for n, i in enumerate(test_list) if i not in test_list[:n]]
# ফলাফল: [1, 5, 3, 6] (প্রথম-occurrence অর্ডার সংরক্ষিত)
প্রথমবার দেখা এলিমেন্টগুলোই রাখে। O(n²) টাইম।
পদ্ধতি ৫: collections.OrderedDict.fromkeys() - অর্ডার সংরক্ষণ + দ্রুত
from collections import OrderedDict
test_list = [1, 5, 3, 6, 3, 5, 6, 1]
res = list(OrderedDict.fromkeys(test_list))
# ফলাফল: [1, 5, 3, 6]
সময় জটিলতা: O(n)। পাইথন ৩.৭+ এ dict.fromkeys() দিয়েও হয় (নরমাল dict ও ইনসারশন অর্ডার মেইনটেইন করে)।
তুলনা সারসংক্ষেপ
| পদ্ধতি | টাইম কমপ্লেক্সিটি | অর্ডার সংরক্ষণ | স্পেস |
|---|---|---|---|
| Naive loop | O(n²) | হ্যাঁ | O(n) |
| List comprehension | O(n²) | হ্যাঁ | O(n) |
| set() | O(n) | না (৩.৭+ এ হ্যাঁ) | O(n) |
| enumerate() + list comp | O(n²) | হ্যাঁ | O(n) |
| OrderedDict/dict.fromkeys() | O(n) | হ্যাঁ | O(n) |
সেরা প্র্যাক্টিস
- অর্ডার গুরুত্বপূর্ণ না হলে:
list(set(lst))(সবচেয়ে দ্রুত) - অর্ডার রাখতে হলে (Python 3.7+):
list(dict.fromkeys(lst)) - পুরানো পাইথন ভার্সনে:
list(OrderedDict.fromkeys(lst))
সম্পূর্ণ আউটপুট
The original list is : [1, 3, 5, 6, 3, 5, 6, 1] The list after removing duplicates : [1, 3, 5, 6] The original list is : [1, 3, 5, 6, 3, 5, 6, 1] The list after removing duplicates : [1, 3, 5, 6] The original list is : [1, 5, 3, 6, 3, 5, 6, 1] The list after removing duplicates : [1, 3, 5, 6] The original list is : [1, 5, 3, 6, 3, 5, 6, 1] The list after removing duplicates : [1, 5, 3, 6] The original list is : [1, 5, 3, 6, 3, 5, 6, 1] The list after removing duplicates : [1, 5, 3, 6]