সমস্যা বিবরণ
দুটি লিস্ট যেগুলো সাব-লিস্ট ধারণ করে, তাদের কমন সাব-লিস্ট গুলো বের করতে হবে।
উদাহরণ
list_1 = [[1, 2], [3, 4], [5, 6]]
list_2 = [[3, 4]]
Output: [[3, 4]]
পদ্ধতি ১: লিস্ট কম্প্রিহেনশন
প্রথম লিস্টের সাব-লিস্ট গুলো ইটারেট করে যেগুলো দ্বিতীয় লিস্টে আছে সেগুলো কलेक्ट করুন।
list_1 = [[1, 2], [3, 4], [5, 6]]
list_2 = [[3, 4]]
result = [sub_list for sub_list in list_1 if sub_list in list_2]
print(result) # [[3, 4]]
নোট: এটি O(n×m) সময় নেয় কারণ in অপারেশন লিস্টে লিনিয়ার সার্চ করে।
পদ্ধতি ২: সেট ব্যবহার করে (দক্ষ)
লিস্টকে টাপলে কনভার্ট করে সেট বানান, তারপর ইন্টারসেকশন নিন। টাপল হ্যাশেবল, লিস্ট নয়।
list_1 = [[1, 2], [3, 4], [5, 6]]
list_2 = [[3, 4]]
# টাপলে কনভার্ট
tuple_1 = map(tuple, list_1)
tuple_2 = map(tuple, list_2)
# ইন্টারসেকশন
result = list(map(list, set(tuple_1).intersection(tuple_2)))
print(result) # [[3, 4]]
তুলনা
| পদ্ধতি | সময় জটিলতা | ব্যবহারযোগ্যতা |
|---|---|---|
| List Comprehension | O(n × m) | ছোট লিস্টের জন্য ঠিক |
| Set Intersection | O(n + m) | বড় লিস্টের জন্য দক্ষ |
উপসংহার
- লিস্ট অফ লিস্ট ইন্টারসেক্ট করতে হলে সেট+টাপল পদ্ধতি দ্রুত
- অর্ডার মেইনটেইন করতে হলে লিস্ট কম্প্রিহেনশন ব্যবহার করুন
- ডুপ্লিকেট হ্যান্ডলিং সেট আটোমেটিক করে দেয়